Asp.net mvc 3 - ajax form submit и проверка
Прошу прощения, если это уже было задано, но я искал когда-то, но все, что я нашел, это довольно старые сообщения (mvc1, mvc2).
У меня есть форма, которую я хотел бы отправить через Ajax.
Это похоже на работу, но не распространяется на проверку на стороне сервера.
1) Я не уверен, следует ли использовать AjaxHelper.BeginForm
или использовать необработанные вызовы jquery ($.ajax)
? Какой здесь рекомендуемый подход?
2) Как обрабатывать проверку на стороне клиента и сервера? Я надеюсь, что структура mvc обеспечивает встроенный механизм для решения этой проблемы?
Есть некоторые проверки, которые я делаю только на стороне сервера. Будет ли использовать ValidationSummary
здесь?
Я использую asp.net mvc3/бритву с ненавязчивой проверкой javascript.
Спасибо!
Изменить: (по просьбе Бобби Б. ниже).
Это было добавлено спустя несколько месяцев после запроса вопроса, поскольку пользователь хотел узнать, как использовать AjaxHelper
Это код javascript, который я использовал:
<script type="text/javascript">
function ajaxValidate() {
return $('form').validate().form();
}
function getGbPostSuccess(ajaxContext){
// .... it is not necessary to do anything here.
}
function showFaliure(ajaxContext){
// handle failure
}
HTML-фрагмент:
@using (Ajax.BeginForm("Index", "Home", new AjaxOptions
{
UpdateTargetId = "form1",
InsertionMode = InsertionMode.Replace,
OnBegin = "ajaxValidate",
OnSuccess = "getGbPostSuccess",
OnFailure = "showFaliure"
}))
{
Ответы
Ответ 1
Я использовал malsup jQuery form plugin для этой цели. Я честно не знаком с AjaxHelper, но похоже, что он сделает то, что вы ищете. Что касается проверки как на стороне клиента, так и на стороне сервера, все это будет происходить в основном автоматически до тех пор, пока вы используете привязку к модели и атрибуты из пространства имен System.DataAnnotations.
public class MyModel
{
[Required(ErrorMessage = "Please enter your name")]
public String Name { get; set; }
[Required(ErrorMessage = "Please enter your email")]
public String Email { get; set; }
[Required(ErrorMessage = "Please enter a rating")]
[Range(1, 5, ErrorMessage = "The rating must be between 1 and 5")]
public Int32 Rating { get; set; }
}
[HttpPost]
public ActionResult Index(MyModel myModel)
{
if(ModelState.IsValid)
{
// good to go, put it in the DB or whatever you need to do
}
else
{
return View(model); // return the user back to the page, ModelState errors can be viewed using Html.ValidationSummary() or individual Html.ValidationMessageFor() calls
}
}
Если вы выполняете собственную проверку на стороне сервера, вы можете либо создать свой собственный атрибут проверки, создав атрибут, который реализует ValidationAttribute, либо просто добавьте ошибки проверки, вызвав ModelState.Errors.Add() (или что-то там, у меня нет ссылки)
Для клиентской стороны MVC будет генерировать проверку клиентов для вас на основе атрибутов DataAnnotations на вашей модели.
Ответ 2
MVC.NET 3 уже имеет это из коробки. Просто убедитесь, что ClientValidationEnabled включен в файле web.config. Проверьте this