BeginForm,具有空控制器和操作缺少参数

时间:2010-12-07 03:38:35

标签: asp.net-mvc html-helper

我想在表单中添加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,但我想了解帮助版本出了什么问题。

1 个答案:

答案 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

一些事情:

  1. htmlAttributes是表单标记的属性,与查询字符串的?Id = 5部分无关。

  2. 为什么您的“Id”变量前缀为“@”符号?但同样,由于上面的#1,它并不重要。你不需要使用它。

  3. 我猜Html.BeginForm()“正常”,因为您在 / Controller / Action / 5 上查看了GET请求的结果。然后,默认的POST将具有相同的URL。

  4. 如果您这样做 - 在HTML中,当您在action参数中为URI指定空字符串(“”)时,它会将其解释为当前URI。见RFC 2396

      

    4.2。同文档参考

         
        

    不包含URI的URI引用是对该引用的引用     目前的文件。换句话说,一个空的URI引用     文档被解释为对该文档开头的引用,     并且仅包含片段标识符的引用是引用     到该文件的已识别片段。遍历这样一个     引用不应导致额外的检索操作。     但是,如果URI引用发生在始终的上下文中     旨在产生新的请求,如HTML的FORM的情况     element,然后一个空URI引用表示的基URI     当前文档,在转换时应该被该URI替换     进入请求。

      
  5. 这会回答你的问题吗?

    编辑:啊,我看到你现在在问什么。我不确定为什么传递null不包含相同的URI。如果明确包含操作名称和控制器名称,它是否有效?我已经在MVC应用程序中以这种方式完成了它并且它已正常工作。

相关问题