#c# #asp.net-mvc-3 #validation #controller
#c# #asp.net-mvc-3 #проверка #контроллер
Вопрос:
Я использую C#
, MVC3
и VS2010
Я заметил, что, несмотря на то, что valdiation приводит к false, метод контроллера все равно выполняется. Это делает проверку бесполезной на стороне сервера. Если нет способа получить результат.
—- ПРАВКИ ——
Вот как я это использую. Это сделано правильно? По крайней мере, отображаются сообщения о проверке, и текстовое поле становится красным.
Модель:
public class CategoriaModel
{
[Required(ErrorMessage="Nome é obrigatório!")]
[StringLength(10, ErrorMessage = "First Name max length is 10")]
public string Nome { get; set; }
}
Вид:
@Html.ValidationSummary(true)
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js") %>" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js") %>" type="text/javascript"></script>
@using (Html.BeginForm("Salvar", "Test", FormMethod.Post))
{
@Html.LabelFor(m => m.Nome)
@Html.EditorFor(m => m.Nome)
@Html.ValidationMessageFor(m=>m.Nome)
<input type="submit" value="Salvar" />
}
Контроллер:
public ActionResult Salvar(CategoriaModel catModel)
{
ViewBag.StatusMessage = "Ok!";
return View("Index");
}
Ответ №1:
ModelState.IsValid
свойство тестирования, однако, если проверка на стороне клиента завершается неудачей, действие не должно вызываться. Проверьте, действительно ли вы проверяете все свои свойства модели.
Комментарии:
1. Ну, довольно странно. Кстати, чтобы отследить его, вы можете просто добавить точку останова в свой контроллер. наблюдайте за объектом ModelState, посмотрите на две коллекции (ключ, значения) и найдите, кто является виновником вашей недопустимой модели. Тестирование состояния модели. isValid предотвратит выполнение вашего кода, но будет неплохо понять, почему форма все еще отправляется.
2. Просто сделал это. ModelState. Значение isValid равно false . Что ж, тестирование решит мою проблему, как вы сказали, но было бы неплохо, чтобы это работало правильно.
3. хорошо, теперь у вас есть исправление, чтобы понять, кто виноват, проверьте ModelState. Ключи и состояние модели. Коллекции значений, должна быть запись для свойства, подтверждающего модель.
4. Если я это сделаю, я смогу узнать, какие свойства недопустимы. В моем случае есть только одно свойство, так что в этом нет необходимости (тем не менее, я это сделал, никаких сюрпризов нет). У вас есть какие-либо идеи, почему контроллер все еще вызывается при сбое проверки клиента?
5. Все кажется правильным. Я проверяю вещи с помощью проекта MVC 3 по умолчанию (с входом в систему и созданием пользователя), и если проверка на стороне клиента завершается неудачей, форма не отправляется. Единственное различие, которое я вижу между вашим кодом и образцом, заключается в jquery.unobtrusive-ajax.js инклюзивность. Попробуйте удалить его или переместить после другой проверки js.