我的cshtlm页面包含下一个代码:
@using (Html.BeginForm("Optional", "ConfigurationSilo2", FormMethod.Post, new { id = "storeDataForm" }))
{
@Html.TextBoxFor(x => x.Height)
<div align="right">
<input type="submit" id="Avanti" value="@ViewRes.ConfigurationString.buttonNext" name="@ViewRes.ConfigurationString.buttonNext" />
</div>
}
我的html生成代码是:
<form action="/ConfigurationSilo2/Optional" id="storeDataForm" method="post">
<input data-val="true" data-val-number="The field Height must be a number." data-val-required="The Height field is required." id="Height" name="Height" type="text" value="0" />
<div align="right">
<input type="submit" id="Avanti" value="Next" name="Next" />
</div>
</form>
这是我的模型代码类:
public class Spondina
{
public int Height { get; set; }
public int Quantity { get; set; }
public float UnitPrice { get; set; }
public float TotalCost { get; set; }
}
为什么我的输入标签中有 data-val data-val-number data-val-required 标签?
答案 0 :(得分:2)
MVC验证正在进行中。您的模型上是否有数据注释?我猜测Height
属性有[Required]
对吗?这些属性由不显眼的客户端验证框架使用。以下是输入助手中添加这些标记的行:
tagBuilder.MergeAttributes(htmlHelper.GetUnobtrusiveValidationAttributes(name, metadata));
HtmlHelper
有一个ClientValidationRuleFactory
,它在HtmlHelper
的构造函数中初始化,其中包括ClientDataTypeModelValidatorProvider
,它检查模型的元数据和例如,在模型中的数字类型的情况下应用适当的验证规则。如果您在模型中启用了客户端验证和数字类型,例如Height
作为int,帮助者将在渲染期间将不引人注意的客户端验证注入到这些输入中。