Html.BeginForm 内部部分更改属性

Html.BeginForm inside partial changes attributes

在我的 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 属性,为什么它发布到错误的路径?

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

如果您想要 post 到 usersController 中名为 x 的方法,则需要

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

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

来自您的代码

Html.BeginForm("/users/x")

我知道用户是你的控制器,x 是一种方法。所以你可以这样做-

@using (Html.BeginForm("x", "users", FormMethod.Post, new { id = "YourFormID"}))
{
}
@using (Html.BeginForm("action", "controller",new { QueryString = 1}, FormMethod.Post, null))
{

}

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

在您的视图中

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