我想在表单中添加ID属性,因此我按照答案here
最初我的代码正在使用:
Html.BeginForm()
,输出如下:
<form action="/Controller/Action?Id=5" method="post">
但是当我用:
替换Html.BeginForm()时Html.BeginForm(null, null, FormMethod.Post, new { @Id = "blah" });
输出表单缺少参数:
<form action="/Controller/Action" method="post">
这一切似乎只是工作&#34;神奇地&#34;如果我用<form action="" method="post">
替换BeginForm,但我想了解帮助版本出了什么问题。
答案 0 :(得分:1)
您正在尝试使用该方法的this版本,对吗?
<ExtensionAttribute> _
Public Shared Function BeginForm ( _
htmlHelper As HtmlHelper, _
actionName As String, _
controllerName As String, _
method As FormMethod, _
htmlAttributes As Object _
) As MvcForm
一些事情:
htmlAttributes是表单标记的属性,与查询字符串的?Id = 5部分无关。
为什么您的“Id”变量前缀为“@”符号?但同样,由于上面的#1,它并不重要。你不需要使用它。
我猜Html.BeginForm()“正常”,因为您在 / Controller / Action / 5 上查看了GET请求的结果。然后,默认的POST将具有相同的URL。
如果您这样做 - 在HTML中,当您在action参数中为URI指定空字符串(“”)时,它会将其解释为当前URI。见RFC 2396:
4.2。同文档参考
不包含URI的URI引用是对该引用的引用 目前的文件。换句话说,一个空的URI引用 文档被解释为对该文档开头的引用, 并且仅包含片段标识符的引用是引用 到该文件的已识别片段。遍历这样一个 引用不应导致额外的检索操作。 但是,如果URI引用发生在始终的上下文中 旨在产生新的请求,如HTML的FORM的情况 element,然后一个空URI引用表示的基URI 当前文档,在转换时应该被该URI替换 进入请求。
这会回答你的问题吗?
编辑:啊,我看到你现在在问什么。我不确定为什么传递null不包含相同的URI。如果明确包含操作名称和控制器名称,它是否有效?我已经在MVC应用程序中以这种方式完成了它并且它已正常工作。