asp.net mvc 3 - отправка и проверка формы ajax - PullRequest
21 голосов
/ 05 марта 2011

Прошу прощения, если об этом уже спрашивали, но я искал некоторое время, но все, что я нашел, это довольно старые сообщения (mvc1, mvc2).У меня есть форма, которую я хотел бы отправить через Ajax.

Этот выглядит так, как будто он будет работать, но не распространяется на проверку на стороне сервера.

1) Я не уверенесли я должен использовать AjaxHelper.BeginForm или использовать необработанные вызовы jquery ($.ajax)?Какой здесь рекомендуемый подход?

2) Как мне выполнить проверку на стороне клиента и на сервере?Я надеюсь, что фреймворк MVC предоставляет встроенный механизм для решения этой проблемы?Есть некоторые проверки, которые я делаю только на стороне сервера.Будет ли работать ValidationSummary здесь по-прежнему?

Я использую asp.net mvc3 / razor с ненавязчивой проверкой 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"
                        }))
{

Ответы [ 2 ]

8 голосов
/ 05 марта 2011

Я некоторое время для этой цели использовал плагин формы jQuery от malsup .Я, честно говоря, не знаком с 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 вашей модели.

1 голос
/ 05 марта 2011

MVC.NET 3 уже имеет это из коробки.Просто убедитесь, что ClientValidationEnabled включен в web.config.Отметьте это

...