2011-08-29 71 views
3

我的模型看起來像驗證在MVC

public class Template 
{ 
    Id 
    Title 
    List<Field> Fields 
} 

「田」實體包含如姓名,標題,類型(文本框/選擇/收音機),選件和驗證規則(範圍的信息,必需,字符串長度)。

MVC中的標準驗證基於DataAnnotations,但我想基於動態和可配置的字段元數據動態驗證(客戶端和服務器端)表單。

可能嗎?任何指針?

PS。我搜索了類似的問題,但無法找到一個可靠的答案。

回答

4

我也有類似的情況,這是我如何處理它:

服務器端

當POST事我遍歷所有字段的值,並根據驗證規則,我做了驗證在我的對象上。然後,您可以簡單地將ModelErrors添加到Field對象。

由於您將Template對象推送到View,因此您可以按名稱Fields[x].SomeProperty訪問Fields。請確保您有一個ValidationMessageForSomeProperty

ModelState.AddModelError("Fields[x].SomeProperty", "The Error Message you want to show.); 

客戶端

確保您的形式所具有的ID,這樣您可以訪問驗證方法()。 然後你遍歷所有的字段,只需添加驗證,只要你願意。

對於所有驗證規則,請檢查驗證Jquery文檔。

$('#frmYourForm').validate(); 
     for (var i = 0; i < 'CountOfAllFields'; i++) 
     { 
      $('#Fields_' + i + '__Foo').rules('add', { required: true, messages: { required: 'The Foo field is required'} }); 
      $('#Fields_' + i + '__Bar').rules('add', { required: true, messages: { required: 'The Bar field is required'} }); 
     } 

我希望我幫你上路!

PS,使用Firebug幫助您找到屬性的正確名稱,這就是你怎麼可以在的ModelState等

+0

感謝ModelErrors鏈接它們,這將幫助。那麼在服務器端,你自己正在做所有的檢查? –

+0

是的,在字段上我有一個DynamicValidation對象列表(自寫類)。這個類有一個ErrorMessage,Enums.ValidationType屬性。併爲MaxLength等東西的ExtraProperty。Enums.ValidationType有要求,數字等。這樣我可以添加一個驗證列表到我的領域。然後我寫了一個方法來檢查字段對他的驗證,如果需要添加ErrorMessage到模型狀態。 –

+0

關於服務器端方法:您說過,「您已經對所有字段值進行了引用,並根據我對對象所做的驗證規則進行了驗證。」#: Q:'ModelState'僅在Controller中的範圍內或查看,對不對?所以,我明白實際驗證(又名if-checks)發生在'Field'對象中,但是您必須在控制器中調用'ModelState.AddModelError()'。這是正確的嗎? 我想了解您是否能夠在您的業務代碼與您的表示層代碼(ASP.NET MVC)中進行所有驗證。謝謝。 –