2012-10-23 171 views
0

我正在開發一個MVC 3應用程序,它需要某些點來自用戶的一些數據。數據然後發送到一個外部DLL(我不允許改變它)。傳遞是通過將一個對象傳遞給一個函數來完成的,這樣對象就可以成爲我的模型。MVC 3自定義驗證

問題是我沒有權限將屬性添加到模型,我也不知道要添加元數據類。

我決定使用JQuery使用自定義的驗證機制,所以我做了輔助功能是這樣的:

@helper TextBox(string name, object value = null) 
    { 
     var val = value ?? ""; 
    <tr> 
     <td class="label">@name : 
     </td> 
     <td> 
      <input type="text" name="@name" id="@name" value="@val" /> 
     </td> 
    </tr> 
} 

@helper ValidationMessage(string name) 
    {<span class="field-validation-valid" data-valmsg-replace="true" data-valmsg-for="@name"></span>} 

@helper TextBoxRequired(string text, string fildName, object value = null, string message = "*") 
    { 
     var val = value ?? ""; 
    <tr> 
     <td class="label">@text :</td> 
     <td> 
      <input type="text" name="@fildName" id="@fildName" value="@val" data-val="true" data-val-required="@message" /> 
      @ValidationMessage(fildName)</td> 
    </tr> 
} 

我已經包括jQuery的1.8.2,jquery.validate和jquery.validate.unobtrusive但它不管用。

任何幫助表示讚賞。

編輯: web配置設置:

<appSettings> 
    <add key="webpages:Version" value="1.0.0.0" /> 
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
    </appSettings> 

而且我使用的是Firefox,Chrome和IE測試用JavaScript實現。

+0

你啓用在web.config中進行驗證(在AppSettings下設置「ClientValidationEnabled」和「UnobtrusiveJavaScriptEnabled」爲true),或者通過代碼使用與'HtmlHelper'上的靜態屬性相同的關鍵字? –

+0

是的。對不起,也沒有添加:

回答

2

我建議你使用視圖模型。保留不允許在其程序集中更改的域模型。然後,讓您的控制器將視圖模型從/向視圖傳遞/傳遞。這些視圖模型是您爲給定視圖的需求特別定義的類。然後視圖模型屬性可以用任何你需要的驗證數據註釋來裝飾。

然後在您的視圖中使用標準和強類型幫助程序,如Html.TextBoxForHtml.ValidationMessageFor,並且不要在某些幫助程序中重新發明輪子。

通過對客戶端驗證的方式來工作,你需要在的順序至少有以下3個引用:

  1. jquery
  2. jquery.validate
  3. jquery.validate.unobtrusive