Проблема
У меня есть список полей, которые пользователь может редактировать. Когда модель отправлена, я хочу проверить, действительны ли эти элементы. Я не могу использовать обозначения данных, потому что каждое поле имеет свой процесс проверки, о котором я не узнаю до времени выполнения. Если проверка не удалась, я использую ModelState.AddModelError(строковый ключ, строковая ошибка)
, где ключ — это имя элемента html, к которому вы хотите добавить сообщение об ошибке. Поскольку существует список полей, имя, которое Razor генерирует для элемента html, похоже на Fields[0].DisplayName
. Мой вопрос, есть ли метод или способ получить ключ сгенерированного имени html из модели представления?
Попытка решения
Я попробовал метод toString()
для ключа, но безуспешно. Я также просмотрел класс HtmlHelper
, но не нашел никаких полезных методов.
Фрагмент кода
Модель представления
public class CreateFieldsModel
{
public TemplateCreateFieldsModel()
{
FreeFields = new List<FieldModel>();
}
[HiddenInput(DisplayValue=false)]
public int ID { get; set; }
public IList<TemplateFieldModel> FreeFields { get; set; }
public class TemplateFieldModel
{
[Display(Name="Dispay Name")]
public string DisplayName { get; set; }
[Required]
[Display(Name="Field")]
public int FieldTypeID { get; set; }
}
}
Контроллер
public ActionResult CreateFields(CreateFieldsModel model)
{
if (!ModelState.IsValid)
{
//Where do I get the key from the view model?
ModelState.AddModelError(model.FreeFields[0], "Test Error");
return View(model);
}
}