Ajax Forms в ASP.NET MVC - PullRequest
       13

Ajax Forms в ASP.NET MVC

0 голосов
/ 29 апреля 2009

У меня есть форма, которая собирает данные с использованием ASP.NET MVC. Это выглядит так:


[AcceptVerbs(HttpVerbs.Post)]  
[AutoValidate]  
public ActionResult Contact(ContactMessage msg)  
{  
    if(ModelState.IsValid)  
    {  
        try  
        {  
            this.messengerService.SendMail(msg);  
            RedirectToAction("Index");  
        }
        catch (Exception ex)
        {
            ModelState.AddUnhandledError(ex);
        }
    }

    return View(msg);
}

Я использую валидации asp.net mvc и валидацию состояния модели, чтобы позаботиться о отображении сообщений о недопустимых правилах. Все работает.

Теперь я хочу отправить действие, используя форму ajax, и отобразить сообщение об успешном завершении действия. Я попытался использовать приведенный ниже код, и он работает, когда операция завершается успешно, но когда происходит сбой (модель имеет ошибки), вся страница снова отображается в DIV, который отображает сообщение об успехе! Это возможно?


[AcceptVerbs(HttpVerbs.Post)]
[AutoValidate]
public ActionResult Contact(ContactMessage msg)
{
    if(ModelState.IsValid)
    {
        try
        {
            this.messengerService.SendMail(msg);
            return Content("Message sent");
        }
        catch (Exception ex)
        {
            ModelState.AddUnhandledError(ex);
        }
    }

    return View(msg);
}

1 Ответ

2 голосов
/ 29 апреля 2009

Ваша проблема - последняя строка, возвращающая нормальное представление.

Попробуйте это:

[AcceptVerbs(HttpVerbs.Post)]
[AutoValidate]
public JsonResult Contact(ContactMessage msg)
{
    if(ModelState.IsValid)
    {
        try
        {
            this.messengerService.SendMail(msg);
            return Json("Message sent");
        }
        catch (Exception ex)
        {
            ModelState.AddUnhandledError(ex);
        }
    }

    return Json("There were model errors");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...