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