Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 MVC 4路由前缀和操作url生成问题_Asp.net Mvc 4_Url_Action - Fatal编程技术网

Asp.net mvc 4 MVC 4路由前缀和操作url生成问题

Asp.net mvc 4 MVC 4路由前缀和操作url生成问题,asp.net-mvc-4,url,action,Asp.net Mvc 4,Url,Action,我对视图中@URL.Action生成的URL有问题。我尝试在一个MVC应用程序中使用相同名称的多个控制器(Modular应用程序,每个模块都有一个前缀和一个主控制器)。我使用带有名称空间的路由来完成路由,这很好。由URL生成的URL。视图中的操作存在前缀不正确的问题。这是我的路线定义: //Default added for url building with section, but makes no difference routes.MapRoute( name: "Default

我对视图中@URL.Action生成的URL有问题。我尝试在一个MVC应用程序中使用相同名称的多个控制器(Modular应用程序,每个模块都有一个前缀和一个主控制器)。我使用带有名称空间的路由来完成路由,这很好。由URL生成的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:/Test1/Home/Action”为什么?我在没有默认路由的情况下进行了尝试,但结果相同(我为url的{section}部分添加了默认路由)


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

这是您正在创建的区域吗?如果是这样的话,下面类似的方法就行了

@Url.Action("Action", "Controller", new { Area = "Test1" }, null)
下面的区域指南如果这个链接被破坏,一个简单的谷歌就足够了


这是您正在创建的区域吗?如果是这样的话,下面类似的方法就行了

@Url.Action("Action", "Controller", new { Area = "Test1" }, null)
下面的区域指南如果这个链接被破坏,一个简单的谷歌就足够了


不,我没有创建区域。也许这是一个解决方案。。。由于所有模块数据都在类库(包括视图)中,因此我认为创建自定义解决方案是一个不错的选择。在这种情况下,我需要为Url.Action()创建自定义函数。在这种情况下,我在程序集中使用了区域注册,效果非常好。这样,我就不需要对模块进行组合(每个模块都是一个组装区域)。部件中的视图与areaviewlocationformats和自定义VirtualPathProvider配合良好。谢谢你告诉我这个方向:)不,我不是在创建区域的。也许这是一个解决方案。。。由于所有模块数据都在类库(包括视图)中,因此我认为创建自定义解决方案是一个不错的选择。在这种情况下,我需要为Url.Action()创建自定义函数。在这种情况下,我在程序集中使用了区域注册,效果非常好。这样,我就不需要对模块进行组合(每个模块都是一个组装区域)。部件中的视图与areaviewlocationformats和自定义VirtualPathProvider配合良好。谢谢你给我指明了这个方向:)