Типичный сценарий, публикация в действии, которое проверяет ModelState.IsValid и, если это так, сохраняет в БД. Правила валидации устанавливаются как аннотации данных в модели.
Вот моя проблема. У меня есть поле данных, которое не может быть длиннее 400 символов. Аннотации данных обеспечивают это, а также проверку jQuery на стороне клиента.
Пользователь вводит 395 символов, включая несколько разрывов строк. Мое приложение превращает эти новые строки в <br />
теги. Но это после того, как UpdateModel()
называется. Поскольку теги <br />
длиннее новых строк, он проходит проверку на UpdateModel, но завершается неудачно, когда фактически пытается сохранить данные в БД.
код, по сути, такой (от NerdDinner):
[HttpPost, Authorize]
public ActionResult Edit(int id, FormCollection collection) {
Dinner dinner = dinnerRepository.GetDinner(id);
try {
UpdateModel(dinner, "Dinner");
dinner.Description = dinner.Description.Replace("\n", "<br />");
//... now it's over length limit
dinnerRepository.Save();
return RedirectToAction("Details", new { id=dinner.DinnerID });
}
catch {
return View(dinner);
}
}
Когда генерируется исключение, нарушения правил ModelState из аннотаций данных не заполняются, поэтому моим пользователям сообщение не отображается.
Какой хороший способ справиться с этим?