【问题标题】:MVC 4 route prefix and Action url generation issueMVC 4 路由前缀和操作 url 生成问题
【发布时间】:2016-03-13 03:37:05
【问题描述】:

我对视图中 @Url.Action 生成的 URL 有疑问。我试图在 1 个 MVC 应用程序中拥有多个具有相同名称的控制器(模块化应用程序,每个模块都有一个前缀和一个 Home 控制器)。我正在使用带有命名空间的路由来完成路由,并且效果很好。视图中由 Url.Action 生成的 URL 存在前缀不正确的问题。这是我的路线定义:

//Default added for url building with section, but makes no difference
routes.MapRoute(
    name: "Default",
    url: "{section}/{controller}/{action}/{id}"
);

routes.MapRoute(
    name: "Test1",
    url: "Test1/{controller}/{action}/{id}",
    defaults: new { section = "Test1", controller = "Home", action = "Index", id = UrlParameter.Optional },
    namespaces: new[] { "MVCTest.Controllers.Test1" }
);

routes.MapRoute(
    name: "Test2",
    url: "Test2/{controller}/{action}/{id}",
    defaults: new { section = "Test2", controller = "Home", action = "Index", id = UrlParameter.Optional },
    namespaces: new[] { "MVCTest.Controllers.Test2" }
);

这很有效,并且在浏览 /Test1 和 /Test2 时会解析正确的控制器。现在我有一个简单的视图(索引,用于两个操作):

Action url: @Url.Action("Action")

但结果总是'Action url: /Test1/Home/Action' 为什么?我尝试不使用默认路由,但结果相同(我为 url 的 {section} 部分添加了默认路由)。

如果我只使用默认路由并使用不同的控制器名称(或使用该部分来确定命名空间的自定义控制器工厂),则操作 url 的生成是正确的。我可以做些什么来修复路由设置中的 Url 生成?

【问题讨论】:

    标签: asp.net-mvc-4 url action


    【解决方案1】:

    这是您正在创建的区域吗?如果是这样的话,像下面这样的东西会起作用

    @Url.Action("Action", "Controller", new { Area = "Test1" }, null)
    

    下面的区域指南如果这个链接被破坏了一个简单的谷歌就足够了

    http://www.itorian.com/2013/10/area-in-mvc-5-with-example-step-by-step.html

    【讨论】:

    • 不,我没有创建区域。也许区域是一个解决方案......由于所有模块数据都在类库(包括视图)中,我认为创建自定义解决方案是一个不错的选择。
    • 在这种情况下需要为 Url.Action() 创建一个自定义函数
    • 我在组件中使用区域注册,效果非常好。这样我就不需要模块的组合(每个模块都是一个组装区)。程序集中的视图与 areaviewlocationformats 和自定义 VirtualPathProvider 配合得很好。谢谢你指点我这个方向:)
    猜你喜欢
    • 2016-06-19
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    相关资源
    最近更新 更多