Подтвердить что ты не робот

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"
                        }))
{
4b9b3361

Ответ 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