在我的bin部署MVC 4应用程序中我的区域路由有什么问题?

时间:2012-07-17 21:20:00

标签: asp.net-mvc asp.net-mvc-routing asp.net-mvc-4 asp.net-mvc-areas

我刚刚在我的网络主机上部署了一个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&registrationType=Author

值得注意的是,MVC4的css捆绑功能在部署后无法正常工作,我回过头来使用经典样式链接到各个样式表。

可能相关:我的问题:Why is unmodified template code in my MVC4 app trying to register areas twice?

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

5 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分: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 。如果您在其他内容上更改controller =“Home”,例如controller =“Home2”,您将显示Home / Index和新默认路径Home2 / Index的完整链接。如果您指定了默认路由,则类似适用于区域中的默认路由。

答案 2 :(得分: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 }
        );
    }
}

答案 3 :(得分:1)

使用@ Html.ActionLink

使用此格式

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

解决了我的问题。

答案 4 :(得分:0)

您是否碰巧在任何领域从MvcContrib继承了PortableAreaRegistration?

我们曾经有过完全相同的症状(在本地工作,不在服务器上工作),直到我们从Portable Areas中删除所有PortableAreaRegistrations并恢复为简单使用AreaRegistration,因为MVC4可以注册一个没有任何附加库的可移植区域。