提问人:Farhad Jabiyev 提问时间:3/14/2015 最后编辑:Farhad Jabiyev 更新时间:4/11/2017 访问量:1260
第一个 html 帮助程序生成客户端验证属性,而第二个则不生成
First html helper generates client-side validation attributes, while the second one doesn't
问:
假设我有这个模型:
public class Person
{
public bool IsApproved { get; set; }
}
有了这些代码,我正在尝试用类型渲染:input
check
@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
答:
10赞
user3559349
3/14/2015
#1
帮助程序不会呈现属性,因为窗体已为同一属性呈现。如果交换顺序,则将呈现 for (而不是 for ) 的属性。CheckBox()
data-val
CheckBoxFor()
data-val
CheckBox()
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
:)好的,很抱歉再次打扰。谢谢。
评论