3

Я разрабатываю приложение, где у меня есть форма с моделью StudentListModel.Проверка модели в asp .net MVC

У меня есть кнопка на той же странице, которая не является кнопкой отправки. Я написал функцию ajax, которая вызывает метод действия в указанном контроллере.

Теперь моя проблема есть текстовое поле для studentname,

[StringLength(160, MinimumLength = 3)] 
    [Display(Name = "First Name")] 
    [Required] 
    [Remote("CheckDuplicateNames", "AddStudent")] 
    public string StudentName { get; set; } 

Ни одна из этих проверок не firing.However если я кнопку, как подать, они будут работать.

Есть ли способ сделать валидацию модели, кроме использования формы?

+2

Это может помочь: http://stackoverflow.com/q/6301492/1043198 –

+0

Это поможет вам http://stackoverflow.com/questions/8538082/asp-net-mvc- 3-необходимость-шагов-для-ненавязчивый-сторона клиент-проверки-в-динамического –

ответ

3

Проверка модели выполняется автоматически перед выполнением ActionMethod, и ModelState будет заполнена информацией об этой проверке. Вам не нужно вызывать ValidateModel, пока вы используете свой контроллер и ActionMethods в жизненном цикле MVC по умолчанию.

Метод действия, который имеет параметры, будет иметь значения для параметров, заполненных с помощью MVC Model Binding. Это означает, что любые значения, отправленные в Form или QueryString (и несколько других источников), будут сопоставляться именам с простыми параметрами или свойствами в сложных параметрах. Используя HTML-форму и методы MVC HtmlHelper для создания типов ввода, вы получаете желаемое поведение с очень небольшой работой, но, как вы уже отметили, для отправки данных требуется отправка формы.

Адакс-вызов также заполнит модель, используя привязку модели, но для этого требуется, чтобы поля были отправлены в ActionMethod. Используя jQuery, это так же просто, как выполнение сообщения или получение запроса на событие нажатия кнопок, передающее объект JavaScript с вашими свойствами модели на нем.

$('#yourButtonId').click(function() { 
    var student = {}; 
    student.StudentName = $('#StudentName').val(); 
    $.post('@Url.Action("ActionMethodName")', student).done(function (data) { 
    //handle returned result from ActionMethod} 
    }); 
}); 
0

Вы можете вызвать проверку модели вручную в методе контроллера. Синтаксис просто ValidateModel(model). Это подтверждает модель на основе ее текущих значений свойств и заполняет словарь ModelState с любыми ошибками.

Если ваша модель не заполняется значениями, но у вас их есть, вы можете ее заполнить, используя UpdateModel(model, values), другой метод, унаследованный от класса Controller.

Смежные вопросы