C# 使用Html.BeginRouteForm进行自定义路由渲染
我以以下方式使用自定义路线映射:C# 使用Html.BeginRouteForm进行自定义路由渲染,c#,asp.net-mvc-4,routes,asp.net-mvc-routing,html.beginform,C#,Asp.net Mvc 4,Routes,Asp.net Mvc Routing,Html.beginform,我以以下方式使用自定义路线映射: context.MapRoute( "CustomRoute", "Area/{controller}/{id}", new { controller = "Task", action = "Index", id = UrlParameter.Optional }, new { id = @"\d+", httpMethod = new HttpMethodConstraint("GET")
context.MapRoute(
"CustomRoute",
"Area/{controller}/{id}",
new { controller = "Task", action = "Index", id = UrlParameter.Optional },
new { id = @"\d+", httpMethod = new HttpMethodConstraint("GET") }
);
在上面的路由中,我将跳过操作名称,通过斜杠传递参数,所以我希望URL如下所示:
domain.com/Area/Task/982
通过手动输入URL,效果很好。现在尝试通过@Html.BeginRouteForm
帮助程序执行相同操作:
@using (Html.BeginRouteForm("CustomRoute", new { id = Model.ID }, FormMethod.Get))
{
@Html.TextBoxFor(m => m.ID)
<button class="btn btn-default btn-sm" type="submit">Get data</button>
}
@使用(Html.BeginRouteForm(“CustomRoute”,new{id=Model.id},FormMethod.Get))
{
@Html.TextBoxFor(m=>m.ID)
获取数据
}
提交表单时,它以如下方式呈现url:domain.com/Area/Task?ID=982
上面缺少什么?如何实现所需的自定义路线?您有一个名为
id
的属性的路线值,该属性将是模型的原始值。但是,同样的路由参数有一个文本框,它是将要使用的文本框的值。但是浏览器不知道路由(服务器端代码),因此该值作为查询字符串添加。您的新{id=Model.id}
没有意义,应该删除。如果您想要。/Area/Task/982
,那么您需要javascriptRemovingnew{id=Model.id}
给我完全相同的结果。同意,使用javascript我可以生成任何URL。仍在试图理解表单不考虑自定义路由的原因。因为浏览器对您的路由一无所知(即服务器端代码)。生成GET的表单总是将其输入的值添加为查询字符串值。Ok。显然,这是有道理的。