5

我刚刚将 MVC4 .NET 4.0 应用程序部署到我的 Web 主机,用于“实时”部署测试。非区域路线运行良好,例如我的

@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&registrationType=Author

可能值得注意的是,MVC4 的 css 捆绑功能在部署后不起作用,我回滚到使用经典样式链接到单个样式表。

可能相关:我的问题:为什么我的 MVC4 应用程序中未修改的模板代码试图注册区域两次?

刚加入:从默认路由的区域路由映射中删除默认操作解决了这个问题。在 VS2012 模板代码中没有默认的控制器。

4

5 回答 5

2

在您的情况下,因为您在查询字符串中指定了区域,所以应该应用来自 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");
    }

此代码使 Home/Index 成为默认路由并跳过 url 中的 Home/Index。如果您在其他内容上更改控制器 =“Home”,例如控制器 =“Home2”,您将显示 Home/Index 的完整链接和新的默认路由 Home2/Index。如果您指定了区域中的默认路线,则类似地适用于这些路线。

于 2012-07-25T06:25:21.167 回答
2

尝试在您所在区域的操作方法中检查 this.ControllerContext.RouteData.DataTokens["area"]。

我遇到过类似问题的情况,其中区域名称只是一个空字符串。

在 action 方法中设置 DataToken 可能会为您提供快速修复,但它不能回答为什么 MVC 不设置区域名称的问题。

于 2012-07-20T14:38:11.203 回答
1

在您的 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 }
        );
    }
}
于 2012-07-25T08:44:37.787 回答
1

使用@Html.ActionLink

使用这种格式

@Html.ActionLink("Authors", "Index", "Home", new { Area = "Author", registrationType = "Author" }, new{})

解决了我的问题。

于 2012-10-17T11:06:42.823 回答
0

您是否碰巧在您的任何区域从 MvcContrib 继承 PortableAreaRegistration?

我们曾经有完全相同的症状(在本地工作,而不是在服务器上工作),直到我们从 Portable Areas 中删除了所有 PortableAreaRegistration 并恢复为使用简单的 AreaRegistration 因为 MVC4 可以注册一个便携式区域而无需任何额外的库。

于 2012-11-13T21:45:14.770 回答