【问题标题】:How to use Html.BeginForm?如何使用 Html.BeginForm?
【发布时间】:2014-01-28 22:07:44
【问题描述】:

你能帮我解释一下这段代码吗?用户点击登录后会发生什么?

@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl })) 
{
<fieldset>
    <legend>Log in Form</legend>
    <ol>
        <li>
            @Html.LabelFor(m => m.UserName)
            @Html.TextBoxFor(m => m.UserName)
            @Html.ValidationMessageFor(m => m.UserName)
        </li>
        <li>
            @Html.LabelFor(m => m.Password)
            @Html.PasswordFor(m => m.Password)
            @Html.ValidationMessageFor(m => m.Password)
        </li>            
    </ol>
    <input type="submit" value="Log in" />
</fieldset>   
}

顺便说一句,根本找不到关于 Html.BeginForm 的谷歌文档。

【问题讨论】:

  • 它只是呈现 HTML 表单标签,按钮提交表单,因此是“提交”类型。 using 子句确保调用 dispose,它呈现关闭标记。 IMO 这是对语言功能的滥用,但事实就是如此。
  • 更重要的是,什么是“new { ReturnUrl = ViewBag.ReturnUrl }”?它是否提交到 returnURL?
  • 顺便说一句,在 Html.BeginForm 上根本找不到谷歌文档。。 “beginform”的第一个结果:msdn.microsoft.com/en-us/library/…
  • 那是 FormExtensions.BeginForm,我正在寻找 Html.BeginForm 及其剃刀!
  • 是一样的。 Html 只是一个 HtmlHelper 对象。 BeginForm 是在FormExtensions 类中定义的HtmlHelper 扩展方法。

标签: asp.net-mvc razor html.beginform


【解决方案1】:

表单被提交到呈现它的同一个 URL。

正如documentation中指定的那样,使用的重载是BeginForm(this HtmlHelper helper, object routeValues),所以ReturnUrl的值将作为路由值传递。该值会发生什么取决于应用程序的路由 - 通常它将作为查询字符串参数附加到请求 URL。

尝试实现视图并检查呈现的标记。

【讨论】:

    猜你喜欢
    • 2017-05-06
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多