仅具有表单ID的Html.BeginForm()未生成正确的操作URL

我只想在beginForm()添加formId

如果我尝试使用
Html.BeginForm(null, null, FormMethod.Post, new {@id="Id"})

然后生成的Html是

我不知道这个动作url是如何产生的所以我试过,
Html.BeginForm(new {@id="Id"})
但后来动作url看起来像这样

在这两种情况下,动作URL都不是应该的,并且它没有达到控制器的后期动作。

当您尝试生成路由时,例如使用BeginForm ,MVC将尽力包含您可能需要的内容。

如果您在domain.com/Home/Index/b9f88f80-f31f-4144-9066-55384c9f1cfc并且使用了您提供的代码,那么将在生成时使用操作,控制器和路由值生成表单。

 controller / action / id /Home / Index / b9f88f80-f31f-4144-9066-55384c9f1cfc 

解决这个问题的一种方法是强制id为空(例如空字符串)。

注意:

 @using (Html.BeginForm(null, null, new { @id = string.Empty }, FormMethod.Post, new { @id = "Id" })) { } 

new { @id = string.Empty }是一个表示路由值的匿名对象。

将@id更改为id。

  @using (Html.BeginForm("Index", "Home", FormMethod.Post, new { id = "MyForm1" })) {  } 

因为在System.Web.Mvc.Html (在System.Web.Mvc.dll中 ),开始表单定义如下: –

BeginForm(这个HtmlHelper htmlHelper,字符串actionName,字符串
controllerName,object routeValues,FormMethod方法,对象htmlAttributes)

像这样的手段: Html.BeginForm(string actionName,string controllerName,object routeValues,FormMethod方法,object htmlAttributes)

所以,它在MVC 4中对我有用

 @using (Html.BeginForm(null, null, new { @id = string.Empty }, FormMethod.Post, new { @id = "trainingForm" })) {   }