Если вы используете записи System.ComponentModel.DataAnnotations, вы можете (как вы, кажется, знаете) украсить свои свойства необходимыми и многими другими тегами
public class Person
{
[Required(ErrorMessage="object with name property doesn't already exist")]
public string Name { get; set; }
}
, хотя я лично использую ViewModels, а не выставляю доменные mdoelsк вашему мнению, действие вашего контроллера теперь может делать что-то вроде:
[HttpPost]
public ActionResult SavePerson(Person model)
{
if (ModelState.IsValid)
{
// your model validates - do things
return RedirectToAction("success view here");
}
return View(model);
}
Это один из стандартных шаблонов обработчиков 'post' в MVC.На мой взгляд, это самый простой путь к проверке вашей объектной модели.
Отсюда есть несколько других вариантов - ваш доменный объект может реализовать IValidatedableObject, и вы можете yield return
ошибки (см. ).http://buildstarted.com/2010/09/20/mvc-3s-ivalidatableobject/ в качестве примера).
Я бы порекомендовал не смешивать два из них, хотя, если вы используете dataannotations и даже имеете единственное недопустимое свойство, метод IsValid для IValidatableObject не будет вызываться.
Оттуда можно многое сделать с помощью пользовательских атрибутов проверки (расширенная версия IsValid, кажется, дает вам большую гибкость http://msdn.microsoft.com/en-us/library/gg480674%28v=vs.98%29.aspx)
Надеюсь, что некоторые из вышеперечисленных помогут - как только вы освоите основыс этим можно многое сделать, и такие вещи, как проверка клиентом пользовательских атрибутов и т. д., очень забавны.
Приветствия, Терри
[изменить, чтобы добавить:
После повторного-Читая ваше сообщение, может быть, вы хотите проверить только на уровне службы? Если так, я использовал следующий подход:
public void Setname(string newName)
{
Validator.ValidateProperty(newName, new ValidationContext(this, null, null) { MemberName = "Name" });
Name = newName;
}
obviДля этого вашему свойству Name потребуется { get; private set; }
, хотя вы всегда можете добавить Validator.ValidateProperty в расширенный установщик для открытого свойства.
]