如何在ASP.NET MVC中选择生成传出URL的路由?

时间:2011-03-22 19:36:11

标签: asp.net-mvc asp.net-mvc-2 t4mvc

美好的一天!

我正在使用ASP.NET MVC 2和T4MVC,似乎有些代码魔术正在发生

当我将此添加到路线表时:

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

当我在视图中写这样的内容以生成传出URL时,框架如何知道我希望应用此规则:

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

如果我对同一控制器/操作对有多个不同的规则(具有不同的参数),该怎么办?哪一个会被选中?是否有任何关于此行为的良好描述?

提前致谢!

3 个答案:

答案 0 :(得分:1)

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

修改

路由匹配期间将忽略参数。选择控制器方法后,mvc使用模型绑定将参数分配给方法变量。

如果您可以解释您希望使用哪种类型的网址结构,我们可以为您提供更多帮助。

答案 1 :(得分: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相同。

希望这有助于澄清一些事情:)

答案 2 :(得分:-1)

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