Проверка ASP.NET вложенных свойств модели
Я пытаюсь проверить модель, содержащую другие объекты с правилами проверки, используя TryUpdateModel:
public class Post
{
public User User;
}
public class User : IValidatableObject
{
public string Captcha;
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (/* check if captcha valid */)
{
yield return new
ValidationResult("Captcha invalid.",
new[] { "Captcha" });
}
}
public ActionResult Edit(int postId, string title)
{
var post = postsRepository.Get(postId);
if (TryUpdateModel(post))
{
/* save */
}
}
Проблема в том, что вложенный пользователь также проверяется, но это обновление сообщения, и в форме нет поля капчи, поэтому модельное состояние всегда недопустимо. Как я могу проверить только свойства типа сообщения?
1 ответ
Решение
Я не особенно согласен с проверкой CAPTCHA на пользовательской модели, если вы не требуете CAPTCHA везде, где вы используете User
модель.
При этом, вы могли бы...
- Создайте флаг, который должен быть установлен для фактической проверки CAPTCHA, и в противном случае верните значение valid.
- Создать другую модель, которая точно соответствует текущей форме
- Удалите CAPTCHA из модели и просто примите ее в качестве параметра для действий, которые требуют ее
- Установите значение часового для CAPTCHA по умолчанию, которое всегда возвращает действительный
- тонны других идей...