2011-03-17 29 views
5

我有,我想一些驗證添加到形式的單一文本框。手動添加驗證文本框沒有一個模型

我如何可以添加一些不引人注目的驗證屬性,它不使用模式?

例如,

@using (Html.BeginForm()) 
    { 
     @Html.ValidationSummary() 
     @Html.Label("code", "Confirmation Code") 
     @Html.TextBox("code")<!-- I want validation on this thing --> 
     <input type="submit" value="Go" /> 
    } 

我怎樣才能使它required,以及其他如stringlength等

回答

1

也許爲時已晚,但我只是找到了解決辦法。

var metaInfo = ViewData.ModelMetadata.Properties.First(data => data.PropertyName == "[Property name]"); 

Dictionary<string, object> attributes = new Dictionary<string, object>(); 

var validators = metaInfo.GetValidators(ViewContext.Controller.ControllerContext); 
if(validators.Count() > 0) 
{ 
    attributes.Add("data-val", "true"); 
    foreach (var validator in validators) 
    { 
     foreach(var rule in validator.GetClientValidationRules()) 
     { 
      attributes.Add(string.Format("data-val-{0}", rule.ValidationType), rule.ErrorMessage); 
      foreach(var param in rule.ValidationParameters) 
      { 
       attributes.Add(string.Format("data-val-{0}-{1}", rule.ValidationType, param.Key), param.Value); 
      } 
     } 
    } 
} 
+0

這段代碼去哪兒了? – 2013-12-06 19:20:44

2

HtmlHelpers將呈現包含一個data-*屬性,它包含了不顯眼的JavaScript用來執行客戶端的所有數據的HTML元素驗證。

我不知道有任何資源記錄data-* HTML屬性,所以我建議創建一個簡單的臨時模型,用所需的數據註釋裝飾並查看呈現的HTML。

一旦你知道需要,那麼你可以在你的HTML直接呈現他們的HTML屬性。

更新

Brad Wilson後可以幫助

1

基於大衛的鏈接,布拉德·威爾遜和一些解決這個我自己挖的是解決方案

<input id="MyInput" name="MyInput" data-val="true" data-val-required="The Error Message"></input> 
<span class="field-validation-error" data-valmsg-for="MyInput" data-valmsg-replace="true"></span> 

輸入requries data-val="true"啓用。

然後添加的要求。您可以使用正常的助手在MVC學習你想要的那些檢查驗證。

例如:

data-val-required="Message for requires" 

data-val-length-min="5" 
data-val-length="The message for min length 5" 

這會悄悄地驗證您的形式。 (只要你包含了jquery.unobtrisive.validate而不是正常的)