2011-03-22 80 views
0

美好的一天!如何在ASP.NET MVC中选择生成外发URL的路由?

我使用ASP.NET MVC 2和T4MVC,似乎一些代码神奇正在发生

当我加入这个路线表:

routes.MapRoute(
    "Login", 
    "login/", 
    MVC.Profile.Login() 
); 

如何框架知道,我想这治当我写这样的应用的视图中的生成传出网址:

<%: Url.Action(MVC.Profile.Login() %> 

如果我有多个不同的规则(具有不同的PARAMS)为同一控制器/行动对?哪一个会被选中?有没有对这种行为有很好的描述?

在此先感谢!

回答

1

我会建议,以帮助您了解这项工作是如何分开T4MVC从MVC本身在封面下做的魔术。

当你写这与T4MVC:

routes.MapRoute(
    "Login", 
    "login/", 
    MVC.Profile.Login() 
); 

这相当于直MVC写这个:

routes.MapRoute(
    "Login", 
    "login/", 
    new { controller = "Profile", action = "Login" } 
); 

并在视图:

Url.Action(MVC.Profile.Login()) 

是一样的

Url.Action("Login", "Profile") 

T4MVC为您提供了强类型/智能感知的好处,但最终它的功能与直MVC相同。

希望这有助于清理一下东西:)

+0

感谢您的快速响应。因此,如果我有两个路由到同一个控制器,说 - 一个与分页参数形式为'/ view/page-2'和一个没有'/ view /'我需要指定路由名称来使用路由生成URL第二''Global.asax'。据我记得,在T4MVC中没有强类型的帮助路由名称? – artvolk 2011-03-23 07:20:16

+1

T4MVC没有为路由名称提供强类型助手,这是正确的。但是只要定义在路由声明和视图中使用的公共常量,就可以获得强大的输入。 – 2011-03-23 19:20:51

+0

您能否详细解释我如何才能让强大的打字工作。我正在使用MvcContrib便携式区域,无法使T4MVC正常工作,因为视图/控制器在路径中没有附加“Areas/MyArea”的情况下返回。 – 2011-05-24 03:47:11

1

它按照您定义的顺序匹配路线模式。这就是为什么你有默认模式作为最后一个。一旦找到匹配的模式,它就停止寻找。

编辑

的参数匹配的路由过程中会忽略。一旦选择了控制器方法,mvc将使用模型绑定将参数分配给方法变量。

如果你可以解释你正在寻找什么类型的url结构,我们可以帮助你更多。

+0

什么是匹配标准?只是控制器\动作或参数? – artvolk 2011-03-22 20:13:28

-1

您的示例是无效的MVC,您通常会传递控制器名称,操作和任何其他参数,然后路由引擎将使用所有信息来确定使用哪条路径,定义的路由越多,信息可能需要确定一个你想匹配

+0

该方法接受一个对象,所以技术上任何东西都是有效的。如果该MVC.Profile.Login()方法返回了一个具有控制器和操作属性的类,它会正常工作,不是吗? – mdm20 2011-03-22 20:43:24

+0

该调用确实非常正确,并且T4MVC调用的方式总是如此。 – 2011-03-22 23:40:25