2011-12-20 3 views
1

У меня вопрос о форме Ajax submit. Вот код:asp.net mvc 3 вернуть сообщение от контроллера действие ajax

Контроллер

[HttpPost, ValidateAntiForgeryToken, ValidateInput(true)] 
public ActionResult Contact(ContactForm model) 
{ 
    if (!ModelState.IsValid) 
    {      
     return new EmptyResult();      
    } 
    else 
    { 
     string message = model.Name + " " + model.Telephone + " " + model.Email + " " + model.Address + " " + model.City + " " + model.ZipCode; 

     //send it  

     return new EmptyResult(); 
    } 
} 

Посмотреть

<script type="text/javascript"> 

    function PostSuccess() { 
     $('.success-message').html("Thank you for your interested"); 
    } 

    function PostFailure() { 
     $('.success-message').html("Something went wrong... Make sure the required fields are filled out and in correct format"); 
    } 
</script> 
<div class="contact-form"> 
@using (@Ajax.BeginForm("Contact", "Info", new AjaxOptions { HttpMethod = "Post", OnFailure = "PostFailure", OnSuccess = "PostSuccess" })) 
{ 
    <p> 
    @Html.LabelFor(x => x.Name, "Your name") 
    @Html.TextBoxFor(x => x.Name, new { @class = "required" })<span class="required">*</span> 
    </p> 

    <p> 
    @Html.LabelFor(x => x.Email, "Your email") 
    @Html.TextBoxFor(x => x.Email)<span class="required">*</span> 
    </p> 

    <p> 
    @Html.LabelFor(x => x.Telephone, "Your phone") 
    @Html.TextBoxFor(x => x.Telephone)<span class="required">*</span> 
    </p> 

    <p> 
    @Html.LabelFor(x => x.Address, "Your address") 
    @Html.TextBoxFor(x => x.Address) 
    </p> 

    <p> 
    @Html.LabelFor(x => x.ZipCode, "Your zipcode") 
    @Html.TextBoxFor(x => x.ZipCode) 
    </p> 

    <p> 
    @Html.LabelFor(x => x.City, "Your city") 
    @Html.TextBoxFor(x => x.City) 
    </p> 
    @Html.AntiForgeryToken() 
    <button type="submit" id="bContact">Send Message</button> 
} 

<div class="required">* Required Fields</div> 
<div class="success-message">Output</div> 

Все, что я хочу, это соответствующее сообщение в "Успех-сообщение" класса, но POST всегда успешно поэтому я всегда получаю «Спасибо за ваш интерес».

спасибо.

ответ

2

Чтобы получить соответствующее сообщение в классе «сообщение успеха», вы должны изменить код в своем действии. Такие, как:

[HttpPost, ValidateAntiForgeryToken, ValidateInput(true)] 
     public ActionResult Contact(ContactForm model) 
     { 
      if (!ModelState.IsValid) 
      { 

       return Json("", JsonRequestBehavior.AllowGet); 

      } 
      else 
      { 
       string message = model.Name + " " + model.Telephone + " " + model.Email + " " + model.Address + " " + model.City + " " + model.ZipCode; 
       return Json(message, JsonRequestBehavior.AllowGet); 
      } 
     } 

и функции успеха, вы помещаете параметр там.

function PostSuccess(data) { 

     $('.success-message').html(data); 
    } 
0

OnSuccess и OnFailure относится к тому, был ли вызов AJAX выполнен успешно или не выполнен. Из MSDN для OnFailure:

This function is called if the response status is not in the 200 range. 

Вы можете сделать следующее, чтобы получить OnFailure бежать:

throw new HttpException(404, "Not Found"); 

Но я рекомендовал бы, что было бы лучше, чтобы изменить событие успеха, чтобы позвонить в яваскрипте функции, будет анализировать результаты вызова.

2

Если вы правильно поняли, что хотите, чтобы ваша форма была подтверждена. То есть, вы хотели бы, чтобы сообщение в PostFailure отображалось, если пользователь сделал некоторые недопустимые входы и заставил пользователя внести исправления перед запуском кода в операторе else вашего контроллера. Вы не разместили свою модель, поэтому я не знаю, выполняете ли вы это, но для формы для проверки вы должны использовать Data Annotations.

Например, ваша модель должна содержать:

[Required(ErrorMessage = "Name is required!")] 
public string Name { get; set; } 

для поля имени. Вы можете изменить сообщение так, как вам хотелось бы, что позволяет использовать сообщение Name, а не общее, которое у вас есть, если хотите.

Тогда в представлении, вы должны включать в себя:

@Html.ValidationMessageFor(x => x.Name) 

И обязательно включают в себя:

<appSettings> 
    <add key="ClientValidationEnabled" value="true"/> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/> 
</appSettings> 

в файле web.config, чтобы включить проверку на стороне клиента (при условии, что вы включили библиотеки проверки jQuery, но они включены по умолчанию в проектах ASP.NET MVC3).

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