2009-08-10 61 views
0

我有一個驗證類實現了IDataErrorInfo,它具有您必須實現的所有方法。我如何重構此驗證?

一個是

public string this[string columnName] 
     { 
      get 
      { 
      } 
     } 
     return ""; 

現在,在這個switch語句我有我的一些形式的驗證。

現在我注意到我的很多表單都需要完全相同的驗證內容。

所以現在當我需要添加更多驗證時,我會創建一個實現「IDataErrorInfo」的新類,添加額外的閾值。

然後在視圖中我做這樣的事

CoreValidation coreReg = new CoreValidation(); 
try 
      { 
       UpdateModel(coreReg, regForm.ToValueProvider()); 

      } 
      catch 
      { 

       return View(); 
      } 

      MoreValidation moreReg = new MoreValidation(); 

      try 
      { 
       UpdateModel(moreReg , regForm.ToValueProvider()); 

      } 
      catch 
      { 

       return View(); 
      } 

我只是不喜歡這個事實,我需要有2個可能繼續增長不同的嘗試catch語句。如果我需要說採取「核心」和「更多」,並添加一些更多的驗證,不能進入任何一個這些我正在看另一個嘗試趕上。

我試圖去「CoreValidation」類,並提取switch語句和屬性,並把它放在一個新的類。

然後我的計劃是用swtich語句調用該類和方法。因此,在「更多」驗證類我會在這個

public string this[string columnName] 
     { 
      get 
      { 
       CoreValidtion(columnName); // this would contain the switch statement 

       //add another switch here with extra validation. 
      } 
     } 
     return ""; 

那我就只有一個嘗試捕捉,我不會重複任何代碼,因爲一切都將調用相同的方法(CoreValidation)。

但updateModel似乎無法弄清楚這一點。當UpdateModel嘗試設置無論它需要設置它無法找到屬性方法,因此所有屬性如

「用戶名」都設置爲空。

那麼我該怎麼做我想做的事?

感謝

回答

0

我建議你看看一對夫婦的樣本asp.net mvc的項目,尤其是nerdinner和contactmangement例子,看看驗證是如何在那些例子做。這些例子會給你一個非常明確的驗證指南。

我在這裏發了一條信息到list those sample projects