我能找到的所有例子都是这样的:
[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的方式吗?
之后如何将其置于模型状态并让视图知道错误?
答案 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.