第一个 html 帮助程序生成客户端验证属性,而第二个则不生成

First html helper generates client-side validation attributes, while the second one doesn't

提问人:Farhad Jabiyev 提问时间:3/14/2015 最后编辑:Farhad Jabiyev 更新时间:4/11/2017 访问量:1260

问:

假设我有这个模型:

public class Person
{
    public bool IsApproved { get; set; }
}

有了这些代码,我正在尝试用类型渲染:inputcheck

@Html.CheckBoxFor(x => x.IsApproved)
@Html.CheckBox("IsApproved")

但是,结果是不同的:

// CheckBoxFor result
<input data-val="true" data-val-required="The IsApproved field is required." id="IsApproved" name="IsApproved" type="checkbox" value="true">
<input name="IsApproved" type="hidden" value="false">

// CheckBox result
<input id="IsApproved" name="IsApproved" type="checkbox" value="true">
<input name="IsApproved" type="hidden" value="false">

第一个如何以及为什么生成用于客户端验证的属性,而另一个则没有?

更新:

交换 和 的顺序后,标记元素的顺序没有改变。@Html.CheckBoxFor@Html.CheckBox

C# ASP.NET-MVC-4 剃刀 不显眼的javascript

评论


答:

10赞 user3559349 3/14/2015 #1

帮助程序不会呈现属性,因为窗体已为同一属性呈现。如果交换顺序,则将呈现 for (而不是 for ) 的属性。CheckBox()data-valCheckBoxFor()data-valCheckBox()CheckBoxFor()

我的理解是,在解析表单时,这会导致jquery.validation.unobtrusive出现潜在的(重复)问题。

控件的 html 帮助程序在内部调用 的方法。从源代码(我的重点)GetUnobtrusiveValidationAttributes()HtmlHelper

仅当启用了不显眼的客户端验证时才呈现属性,并且仅当我们从未在此表单中呈现过具有此名称的字段的验证时。此外,如果没有表单上下文,那么我们就无法呈现属性(我们无法将它们附加到)

public IDictionary<string, object> GetUnobtrusiveValidationAttributes(string name, ModelMetadata metadata)
{

评论

0赞 Farhad Jabiyev 3/14/2015
谢谢你的一个很好的解释。这是一个答案。
0赞 Farhad Jabiyev 7/24/2015
嗨,@Stephen,很抱歉再次打扰。几天前,我发布了一个关于一个问题的问题,我 metAsp.net MVC。你知道吗?你能看一下吗?这是个问题
0赞 7/24/2015
@FarhadJabiyev,现在没时间了,但我明天早上会看看:)
0赞 Farhad Jabiyev 7/24/2015
:)好的,很抱歉再次打扰。谢谢。