Как реализовать проверку ASP.NET MVC 2, которая проверяет базу данных? - PullRequest
1 голос
/ 27 июля 2010

Все примеры, которые я могу найти, делают что-то вроде этого:

[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);
}

Нужно ли просто расширить Exception для пользовательского SomeTypeOfCustomExtension выше, или уже что-то построено?Я делаю это ASP.NET MVC 2 способ?

После этого, как мне перевести его в модельное состояние и дать представлению понять, что что-то не так?

Ответы [ 2 ]

1 голос
/ 27 июля 2010

Посмотрите, это может помочь

Удаленная проверка с ASP.NET MVC 2

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

0 голосов
/ 27 июля 2010

Описанный здесь способ ASP.NET 2.0 MVC для пользовательской проверки описан здесь. В основном он показывает, как написать пользовательский атрибут проверки.Вот пример одного такого пользовательского атрибута, который проверяет базу данных на уникальность имени:

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 (не требующий пользовательских атрибутов) - , описанный здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...