在部分视图中强制无阻的语法,而无需 Html.BeginForm / Ajax.BeginForm

Force unobstructive syntax without Html.BeginForm / Ajax.BeginForm in partial view

提问人:Glenn Dierckx 提问时间:1/27/2011 更新时间:2/3/2011 访问量:1193

问:

当我将窗体的一部分放在分部视图中时,除了分部视图中的窗体元素外,所有窗体部分都获得了畅通无阻的语法。

我发现如何“应用”无障碍语法的唯一方法是在部分视图中启动另一个表单。

视图:

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

部分视图:

@Html.TextBoxFor(m => m.SomeContent)

输出:

<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">

因此,只有 View 中的输入元素具有畅通无阻的语法,而部分视图没有......

有没有办法在部分视图中应用无障碍语法,而不需要您开始一个新表单?

asp.net 验证 asp.net-mvc-3 partial unobtrusive-javascript

评论


答:

4赞 Glenn Dierckx 2/3/2011 #1

我实际上找到了更好的解决方案!在 asp.net mvc 代码中挖掘了一下,MvcForm 类创建了所有畅通无阻的验证语法。

因此,如果您使用:

@using(new MvcForm(ViewContext))
{
}

而不是

@using(Html.BeginForm())
{
}

它仍将应用畅通无阻的语法,但不会创建表单 HTML 标记:)

评论

0赞 Aravind 12/19/2013
你是怎么解决的,我也面临同样的问题
0赞 Glenn Dierckx 2/11/2014
@Aravind,您应该使用以下命令包装部分 cshtml 文件: @using(Html.BeginForm()) { content.. } 通过这种方式,您将获得所有正确的 HTML 属性,而无需将其包装在 <form> 标记中:)