我该如何重构此验证?

时间:2009-08-10 19:04:12

标签: asp.net-mvc validation idataerrorinfo

我有一个实现IDataErrorInfo的验证类,它具有您必须实现的所有方法。

一个是

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

现在在这个switch语句中,我对表单进行了一些验证。

现在我注意到很多表单需要完全相同的验证。

所以现在当我需要添加更多验证时,我创建一个实现“IDataErrorInfo”的新类添加额外的valdation。

然后在视图中我做了类似的事情

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

            }
            catch
            {

                return View();
            }

            MoreValidation moreReg = new MoreValidation();

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

            }
            catch
            {

                return View();
            }

我只是不喜欢这个事实我需要有两个单独的try catch语句可以继续增长。如果我需要说“核心”和“更多”,并添加一些不能进入其中任何一个的更多验证,我正在寻找另一个尝试捕获。

我试图转到“CoreValidation”类并提取出switch语句和Properties,并将它放在一个新类中。

然后我的计划就是用swtich语句调用该类和方法。所以在“更多”验证课中我会在这个

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

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

然后我只有一次尝试catch而且我不会复制任何代码,因为所有代码都会调用相同的方法(CoreValidation)。

但是updateModel似乎无法解决这个问题。当UpdateModel尝试设置它需要设置的任何东西时,它找不到属性方法所以所有属性如

“UserName”都设置为null。

那我怎么做我想做的事呢?

由于

1 个答案:

答案 0 :(得分:0)

我建议你看几个示例asp.net mvc项目,特别是nerdinner和contactmangement示例,看看如何在这些示例中完成验证。这些例子将为您提供非常明确的验证指南。

我在list those sample projects发了一个帖子。