我刚刚部署了MVC4 .NET 4.0的应用程序到我的虚拟主机,为“活”的部署测试。 非 - 面积路线做工精细,如我
@Html.ActionLink("Register as a Client", "Register", "Account", new { registrationType = "Client"}, null)
链接工作正常,并且链接打开正确的页面。 然而,链接到这样一个区域基础的行动:
@Html.ActionLink("Authors", "Index", "Home", new { Area = "Author", registrationType = "Author" }, null)
实际上呈现到浏览器链接缺少行动和控制,即
http://mylivedomain.com/?Area=Author®istrationType=Author
这可能是值得一提的是MVC4的CSS捆绑功能部署后不工作,我回滚到使用经典的款式链接到个人样式表。
可能与:我的问题: 为什么在我的MVC4应用未修改的模板代码试图两次注册的地方?
JUST IN:取下区域路线映射的默认操作默认rouite解决了这个问题。 有没有默认控制器下手,在VS2012模板代码。
请检查this.ControllerContext.RouteData.DataTokens [“区”]在您所在地区的行动方法。
我已经受够了类似的问题,在该地区的名称只是一个空字符串的情况。
在操作方法设置DataToken可能会为您提供一个快速修复,但它没有回答为什么MVC不设置区域名称的问题。
在你的情况,因为你指定的查询字符串的区域,距离Global.asax.cs中的路线应适用。 我相信你有这样的事情有:
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
).DataTokens.Add("area","Author");
}
此代码首页/索引默认路由和URL跳过首页/索引 。 如果您在其他例如控制器=什么改变控制器=“家庭”,“家庭2”你会全屏显示链接首页/指数和新的默认路由家庭2 /指数。 类似的适用,如果你有这些规定中的默认区域的路由。
在你的global.asax.cs确保你有你此行Application_Start
:
AreaRegistration.RegisterAllAreas();
在每一个领域,你应该有AreaRegistration.cs是这样的:
public class testAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "test";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"test_default",
"test/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
}
随着@ Html.ActionLink
使用这种格式
@Html.ActionLink("Authors", "Index", "Home", new { Area = "Author", registrationType = "Author" }, new{})
解决了我的问题。
你碰巧在您的任何领域,从MvcContrib继承PortableAreaRegistration?
我们曾经有过完全一样的症状(在本地工作,而不是在服务器上),直到我们删除了所有来自移动领域的PortableAreaRegistrations,重新使用简单AreaRegistration因为MVC4可以在没有任何额外的库注册的便携式区域。