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

时间:2013-11-26 02:29:07

标签: c# asp.net-mvc-4 html.beginform

我只想在beginForm()

中添加formId

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

然后生成的Html是
<form action="/newquestion/payment/b9f88f80-f31f-4144-9066-55384c9f1cfc" ... >

我不知道该动作网址是如何生成的,所以我尝试了,
Html.BeginForm(new {@id="Id"})
但后来动作网址看起来像这样 <form action="/newquestion/payment/Id... >

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

3 个答案:

答案 0 :(得分:4)

当您尝试生成路由时,例如使用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 }是一个匿名对象,表示路由值。

答案 1 :(得分:1)

将@id更改为id。

 @using (Html.BeginForm("Index", "Home", FormMethod.Post, new { id = "MyForm1" }))    
    {
        <input id="submit" type="submit" value="Search" />
    }

答案 2 :(得分:0)

由于在 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方法,对象htmlAttributes)

所以,它在MVC 4中适用于我

@using (Html.BeginForm(null, null, new { @id = string.Empty }, FormMethod.Post,
    new { @id = "trainingForm" }))
{
    <input id="TRAINER_LIST" name="TRAINER_LIST" type="hidden" value="">
    <input type="submit" value="Create" id="btnSubmit" />
}