如何实现检查数据库的ASP.NET MVC 2验证?

时间:2010-07-27 04:42:55

标签: validation asp.net-mvc-2

我能找到的所有例子都是这样的:

[Required]
public string Title { get; set; }

这对于简单的情况很有用,但是那些检查数据库或服务器端的东西呢?

例如,假设我有一个电影数据库,我想让人们对它进行评分。我怎么能判断某人是否已经评价了一部电影,因为我只想让他们对电影评分一次。

我认为它会是这样的:

public IEnumerable<string> ValidateUserHasNotAlreadyRatedMovie(User currentUser, Guid movieId)
{
  if(movieHasAlreadyBeenRated)
  {
    yield return "Movie been rated man!";
  }
}

现在,我会用以下内容来称呼它:

var errors = new List<string>();
errors.AddRange(ValidateUserHasNotAlreadyRatedMovie(topic, comment));
if(errors.Any())
{
  throw new SomeTypeOfCustomExtension??(errors);
}

我是否只需要为上面的自定义SomeTypeOfCustomExtension扩展Exception,或者是否已经构建了一些东西?我这样做ASP.NET MVC 2的方式吗?

之后如何将其置于模型状态并让视图知道错误?

2 个答案:

答案 0 :(得分:1)

看到这可能有所帮助

使用ASP.NET MVC 2进行远程验证

http://bradwilson.typepad.com/blog/2010/01/remote-validation-with-aspnet-mvc-2.html

答案 1 :(得分:0)

ASP.NET 2.0 MVC进行自定义验证的方式是described here.它基本上展示了如何编写自定义验证属性。以下是一个此类自定义属性的示例,该属性检查数据库的名称唯一性:

public class UniqueNameAttribute : ValidationAttribute 
{ 
    public override bool IsValid(object value) 
    { 
        string str = (string)value; 
        if (String.IsNullOrEmpty(str)) 
            return true; 

        using (XDataContext vt = new XDataContext()) 
        { 
            return !(vt.Users.Where(x => x.Username.Equals(str)).Any()); 
        } 
    } 
} 

ASP.NET 1.0方式(不需要自定义属性)是described here.