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
,那么您需要javascriptRemoving
new{id=Model.id}
给我完全相同的结果。同意,使用javascript我可以生成任何URL。仍在试图理解表单不考虑自定义路由的原因。因为浏览器对您的路由一无所知(即服务器端代码)。生成GET的表单总是将其输入的值添加为查询字符串值。Ok。显然,这是有道理的。