Как [и где] реализовать проверку с использованием ModelBinder - PullRequest
3 голосов
/ 20 августа 2009

Я занимаюсь разработкой небольшого сайта с использованием ASP.NET MVC, MySQL и NHibernate.

У меня есть класс контактов:

[ModelBinder(typeof(CondicaoBinder))]
public class Contact {
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual int Age { get; set; }    
}

и модель Binder:

public class ContactBinder:IModelBinder {
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) {
         Contact contact = new Contact ();
         HttpRequestBase form = controllerContext.HttpContext.Request;

         contact.Id = Int16.Parse(form["Id"]);
         contact.Name = form["Name"];
         contact.Age = Int16.Parse(form["Age"]);

         return contact;
    }
}

Кроме того, у меня есть представление с формой для обновления моей базы данных, используя это действие:

public ActionResult Edit([ModelBinder(typeof(ContactBinder))] Contact contact) {
    contactRepo.Update(contact);

    return RedirectToAction("Index", "Contacts");
}

Пока здесь все работает нормально. Но я должен выполнить проверку формы, прежде чем обновлять свой контакт.

Мой вопрос: где я должен выполнить эту проверку? В методе ActionResult или в модели Binder? Или еще где-нибудь?

Большое спасибо.

Ответы [ 3 ]

2 голосов
/ 20 августа 2009

Взгляните на XVAL Стива Сандерсона.

В ваших бизнес-объектах должна применяться ваша бизнес-логика.

Kindness

Dan

XVal

0 голосов
/ 20 августа 2009

Я думаю, что в этом случае лучше следовать рекомендации Microsoft, которая является Проверка с помощью сервисного уровня

0 голосов
/ 20 августа 2009

Я второй Стив Сандерсон, его книга потрясающая.

Мне очень понравился подход к ужину, написанный Робом Конери, Скоттом Хансельманом, Филом Хааком, Скоттом Гатри. По сути, у вас есть метод в каждой сущности, который проверяет соответствие бизнес-логике. Этот метод возвращает список RuleViolations, которые содержат поле / сообщение об ошибке. Вы также выставляете значение bool для удобства.

Вы получаете бесплатную главу здесь: Глава Обед Nerd

...