2013-04-29 125 views
3

我想在剃鬚刀視圖中根據需要製作文本框字段。我無法使用驗證屬性[Required],因爲字段名稱是動態生成的。我檢查了使用javascript將data-val-required字段設置爲truethis answer。有沒有其他的方式來做到這一點,因爲我不會在運行項目之前知道字段ID?在剃刀視圖中根據需要製作字段

編輯:

我嘗試下面的代碼和現在的工作,除了在表單提交不顯示驗證消息。

@for (int i = 0; i < Model.Controls.Length; i++) 
{ 
      @Html.TextBoxFor(x => x.Controls[i].Value, new { id = obj.VitalName, data_val_required = "true" }) 
      @Html.ValidationMessageFor(x => x.Controls[i].Value, "Please fill in the details.") 
     </td> 
    </tr> 
} 
+0

這可以通過屬在生成字段名稱時創建自定義驗證器。字段如何生成? – Nomad101 2013-04-29 09:58:39

+0

如果您希望客戶端驗證並處理HTML 5,那麼您可以使用所需的屬性標記文本框字段,即' – 2013-04-29 10:06:01

回答

1

如果字段中的部分類生成的,你可以實現一個哥們類的領域中的元數據,如下所示:link。 如果您的代碼是由ORM(例如實體框架)生成的,則生成的類應該是部分的。 所以,你需要做的是以下幾點:

  1. 創建一個類來保存元數據,給它一個合適的名字。
  2. 創建一個部分類(使用與生成的類相同的名稱空間)並使用MetadataType屬性對其進行裝飾。該屬性需要一個類型,它是您剛剛創建的類。
  3. 將屬性添加到元數據類。它們必須完全匹配生成的類中的屬性,但不必重複所有屬性,只需重複所需的屬性。因此,如果您只想創建一個屬性「姓氏」,只需添加

    [必需] 公共字符串姓氏{get; set; }

到類

3

使用@required = true在HTML中的屬性,而不是data_val_required = "true"

@Html.TextBoxFor(x => x.Controls[i].Value, new { id = obj.VitalName, @required = true }) 
0

只是對於那些誰正在努力實現它通過@ Html.EditorFor,現在看來,這是不可能通過一些htmlAttributes,不要誤將'additionalViewData'與'htmlAttributes'誤解爲現在2個小時:@