Допустим, у вас есть простой объект, подобный этому:
public class MyObject {
public int Test { get; set; }
}
И вы рассчитываете на связыватель модели по умолчанию, чтобы убедиться, что пользователь не оставляет поле «Тест» пустым при публикации формы, как показано ниже:
<form method="post" action="/test">
<p>
<%=Html.TextBox("Test") %>
<%=Html.ValidationMessage("Test") %>
</p>
<input id="Submit1" type="submit" value="submit" />
</form>
И это действие:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Test(MyObject o) {
return View();
}
Это все работает должным образом, когда данные формы содержат ключ для «Test» (например, «Test=val
» или «Test=
»)
Но если ключ отсутствует в данных формы, проверка не происходит. Таким образом, в случае пустого почтового запроса или запроса с данными, такими как AnotherField=foo
, свойство объекта модели по умолчанию соответствует значению типа по умолчанию (в данном случае 0). И ModelState.IsValid
возвращает истину.
Это, IMO, не то поведение, которое можно было бы ожидать.
Так что вы предлагаете изменить это поведение?
Редактировать:
Имейте в виду, что злонамеренный пользователь может легко подделать данные формы с помощью плагина FireBug или Tamper Data , чтобы передать проверки связывателя модели по умолчанию, что может вызвать некоторые проблемы безопасности.