Аннотация данных MVC - Обязательное поле не работает
-
06-07-2019 - |
Вопрос
Привет, у меня есть следующий код в моем приложении, но только с двумя полями он не работает.
[Required]
public string DevelopmentPM { get; set; }
Выполняется и проходит следующий тест:
[TestMethod]
public void SiteConstruction_MODEL_DevelopmentPM_Is_Required()
{
//arrange
var propertyInfo = typeof(SiteConstructionMetadata).GetProperty
("DevelopmentPM");
//act
var attribute = propertyInfo.GetCustomAttributes(typeof(RequiredAttribute),
true).Cast<RequiredAttribute>().FirstOrDefault();
//assert
Assert.IsNotNull(attribute);
}
Мой контроллер выглядит как:
TryUpdateModel(siteConstruction);
if (!ModelState.IsValid)
return View(siteConstruction);
У меня есть другие обязательные поля в модели, и с ними все в порядке.Это поле равно нулю (я проверил), но не делает модель недействительной - поэтому проверка не выполняется и при сохранении выдается ошибка.
Мой Взгляд
<li>
<label for="DevelopmentPM">
<strong>Development PM:</strong></label>
<%= Html.TextBox("DevelopmentPM") %>
<%= Html.ValidationMessage("DevelopmentPM", "*") %>
</li>
Я просмотрел свой .dbml (Linq to SQl), правописание выглядит нормально.
Я... я упускаю что-то простое - пожалуйста, схожу с ума.
Спасибо
Дэви
Решение
[MetadataType(typeof(SiteConstructionMetadata))] выше моего частичного класса я считал само собой разумеющимся, что он у меня там есть.
В следующий раз, вместо того чтобы публиковать фрагменты, я, думаю, выложу их все - смеоне вы заметили это довольно быстро.
Дэви
Другие советы
Убедитесь, что вы делаете DataAnnotationsModelBinder
связующее устройство модели по умолчанию тоже.Добавьте следующее в свой Global.asax.cs
:
ModelBinders.Binders.DefaultBinder = new Microsoft.Web.Mvc.DataAnnotations.DataAnnotationsModelBinder();
и убедитесь, что вы ссылались на System.ComponentModel.DataAnnotations.dll
сборка в вашем проекте.Видишь этот учебник для получения более подробной информации.