在局部视图中强制使用无阻塞语法而不使用Html.BeginForm/Ajax.BeginForm

Gle*_*ckx 5 asp.net validation unobtrusive-javascript partial asp.net-mvc-3

当我将部分表单放在局部视图中时,除了局部视图中的表单元素之外,所有表单部分都会获得无阻碍语法.

我发现如何"应用"无阻碍语法的唯一方法是在局部视图中启动另一个表单.

视图:

@using (Ajax.BeginForm("SubmitHandler", new DefaultAjaxOptions()))
{
    @Html.EditorFor(m => m.Name)
    @Html.Partial("MyPartialView", Model)
}
Run Code Online (Sandbox Code Playgroud)

PartialView:

@Html.TextBoxFor(m => m.SomeContent)
Run Code Online (Sandbox Code Playgroud)

输出:

<input class="text-box single-line" data-val="true" data-val-required="This field is required." id="Name" name="Name" type="text" value="">
<input id="SomeContent" name="SomeContent" type="text" value="0">
Run Code Online (Sandbox Code Playgroud)

因此,只有View中的input元素具有无阻碍语法,而部分视图没有...

有没有办法在局部视图中应用无阻碍语法,这不需要你开始一个新的表单?

Gle*_*ckx 4

我实际上找到了更好的解决方案!对 asp.net mvc 代码进行了深入研究,MvcForm 类创建了所有无障碍验证语法。

所以如果你使用:

@using(new MvcForm(ViewContext))
{
}
Run Code Online (Sandbox Code Playgroud)

代替

@using(Html.BeginForm())
{
}
Run Code Online (Sandbox Code Playgroud)

它仍然会应用无障碍语法,但不会创建表单 html 标签:)