如果同一模型属性调用两次,为什么TextBoxFor不包含验证元素?

时间:2012-10-19 19:36:02

标签: asp.net-mvc asp.net-mvc-4

简单问题......以下是一些剃刀代码的示例:

@Html.TextBoxFor(c => c.RevisedEstimate)
@Html.TextBoxFor(c => c.RevisedEstimate)

以下是呈现方式:

<input data-val="true" data-val-number="The field Revised Estimate must be a number." id="RevisedEstimate" name="RevisedEstimate" type="text" value="0" />
<input id="RevisedEstimate" name="RevisedEstimate" type="text" value="0" />

你问的一个显而易见的问题是,“你为什么这样做?”。剃刀视图实际上构建了在KendoUI网格中使用的客户端详细信息行模板。有两个相似的网格,我们使用相同的viewmodel服务器端。我们实际上为模板提供了id元素,因此每行中的每个字段都以唯一的id结尾。

为什么第二个输入元素没有data-val和data-val-number元素?

2 个答案:

答案 0 :(得分:2)

知道JS在后台做了什么,这似乎是为了防止冲突。 JS会查找具有数据属性的元素以及其他函数进行验证,因此如果有多个实例,它可能会选择错误的元素。

答案 1 :(得分:1)

因为我们生成了用于客户端模板的HTML,所以我们所做的只是创建一个变量来保存帮助器生成的HTML,然后在Views中渲染出那些代码。

类似的东西:

@{
   var revisedEstimateInput = Html.TextBoxFor(c => c.RevisedEstimate)
}

然后在视图中:

@(revisedEstimateInput) 

......根据需要在尽可能多的地方。这样,验证和其他元数据属性就在我们的客户端模板中,并且所有kenodUI验证都能正常工作。