2012-10-19 26 views
0

簡單的問題...下面是一些剃刀代碼的例子:爲什麼TextBoxFor包含驗證元素(如果爲同一模型屬性調用兩次)?

@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元素?

+1

只是一個猜測,但可能是因爲他們有相同的ID。驗證腳本找到第一個併爲其提供屬性。 – Zabavsky

+0

是否有一個實際的理由有2個輸入相同的屬性? –

+0

這些實際上是構建KendoUI網格的客戶端模板。所以是的,有一個實際的原因。 – PilotBob

回答

1

,因爲我們對我們所做的只是創建一個變量來保存由輔助生成的HTML,然後渲染出的觀點,即代碼客戶端模板使用了生成HTML ..

喜歡的東西:

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

然後在視圖以後:

@(revisedEstimateInput) 

...需要在儘可能多的地方。這樣,驗證和其他元數據屬性就位於我們的客戶端模板中,並且所有的kenodUI驗證都能正常工作。

+0

這工作正常,但例如我必須爲每個字段設置自定義類。第一個字段應該有'field1'類,第二個'field2'等等。你知道一個方法來實現這個嗎? var revisedEstimateInput = Html.TextBoxFor(c => c.RevisedEstimate,new {@class ='field1')}) – SzilardD

2

不知道JS在後臺做了什麼,似乎這樣做是爲了防止衝突。 JS查找帶有數據屬性的元素以及其他函數,因此如果有多個實例,它可能會選擇錯誤的元素。

相關問題