haa*_*gel 30 asp.net-mvc asp.net-mvc-3
这是你肯定知道的默认路线:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Start", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
Run Code Online (Sandbox Code Playgroud)
假设我使用BeginForm()方法,如下所示:
@using (Html.BeginForm("MyAction", "MyController", new { id = 4 }))
Run Code Online (Sandbox Code Playgroud)
这将呈现以下表单标记:
<form method="post" action="/MyController/MyAction/4">
Run Code Online (Sandbox Code Playgroud)
现在,假设我已经制定了自定义路线:
routes.MapRoute(
"MyCustomRoute", // Route name
"MyController/{id}/{action}", // URL with parameters
new { controller = "MyController", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
Run Code Online (Sandbox Code Playgroud)
当我创建一个表单时,我希望它看起来像这样:
<form method="post" action="/MyController/4/MyAction">
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用上面示例中的BeginForm(),我将得到一个匹配默认路由的url.有没有办法告诉BeginForm()在创建动作的URL时使用我的自定义路由而不是默认路由?或者BeginForm()总是生成遵循默认路由模式的URL?
如果重要的话,我正在使用asp.net mvc 3.
Ale*_*kor 41
您可以使用Html.BeginRouteForm()HtmlHelper类中的方法.
@Html.BeginRouteForm("MyCustomRoute",
new { controller = "MyController", action = "MyAction" })
Run Code Online (Sandbox Code Playgroud)
这样做的原因是路由系统会选择匹配的第一条路由来构建该路由。因此,要解决此问题,您可以重新排列路线,但这非常脆弱。
由于BeginForm方法不会增加太多价值,因此您可以使用HTML表单元素来构建表单并通过@ Url.RouteUrl()来构建操作,就像这样
@Url.RouteUrl("MyCustomRoute", new { controller = "MyController", action = "MyAction" })
Run Code Online (Sandbox Code Playgroud)
请注意,我在这里使用命名路由!
| 归档时间: |
|
| 查看次数: |
17254 次 |
| 最近记录: |