【问题标题】:Html.BeginForm inside partial changes attributesHtml.BeginForm 内部部分更改属性
【发布时间】:2016-03-13 07:17:55
【问题描述】:

在我的 ASP.NET MVC (5.2) 项目中,我有一个名为 register.cshtml 的页面。它不包括任何形式或任何东西,只是普通的 div。

在其中一个 div 中,我正在渲染部分内容:

@Html.Partial("~/Views/Users/_x.cshtml").

_x.cshtml里面我有一个表格:

@using (Html.BeginForm("/users/x"))
{
   ...
}

当我进入我的注册页面时,我希望我的表单呈现为:

<form action="/users/x" method="post"> ... </form>

但相反,我得到了这个:

<form action="/users/register?Length=23" method="post" novalidate="novalidate"> ... </form>

什么是length=23,为什么要添加novalidate 属性,为什么发布到错误的路径?

为什么我的表单无法正确呈现?

【问题讨论】:

  • 你打电话给this overload。我想这不是你想要的。您应该在 BeginForm 中使用控制器/操作名称,而不是 url。
  • 假设你有一个名为 usersController 的控制器和一个名为 x 的方法,那么它需要是 @using (Html.BeginForm("x", "users")) {
  • 哦,我怎么会犯这么简单的错误。是的,现在更正了。您能否将其发布为答案@StephenMuecke

标签: asp.net-mvc asp.net-mvc-5 partial-views asp.net-mvc-partialview html.beginform


【解决方案1】:

如果您想发布到usersController 中名为x 的方法,那么它需要是

@using (Html.BeginForm("x", "users"))
{
    ....
}

请注意,您当前使用的是接受object routeValuesoverload,因为它是string,所以该方法为Length 生成了一个路由值,因为这是string 的唯一属性(/users/register 是因为生成主视图的方法)

【讨论】:

  • 参见解释Length查询字符串值的更新
  • 是的,我也意识到它将对象的所有属性序列化为查询字符串参数,这解释了神秘的长度=23 :)
【解决方案2】:

来自您的代码

Html.BeginForm("/users/x")

我了解用户您的控制器和 x 是一种方法。所以你可以这样做-

@using (Html.BeginForm("x", "users", FormMethod.Post, new { id = "YourFormID"}))
{
}

【讨论】:

    【解决方案3】:
    @using (Html.BeginForm("action", "controller",new { QueryString = 1}, FormMethod.Post, null))
    {
    
    }
    

    注意:这是由于在 beginform 构造函数中传递了错误的参数。

    在你的视野中

     @Html.Partial("~/Views/Shared/_x.cshtml")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-13
      • 1970-01-01
      • 1970-01-01
      • 2020-10-22
      • 1970-01-01
      相关资源
      最近更新 更多