0

再会!

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

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

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

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

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

如果我对同一个控制器/动作对有多个不同的规则(具有不同的参数)怎么办?会选择哪一个?有什么地方可以很好地描述这种行为吗?

提前致谢!

4

3 回答 3

1

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

编辑

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

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

于 2011-03-22T19:43:26.230 回答
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 相同。

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

于 2011-03-22T23:49:39.840 回答
-1

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

于 2011-03-22T20:39:22.627 回答