2013-10-04 7 views
0

Привет, мой вопрос: у меня есть два divs, один div содержит @ ajax.beginform, а другой div пуст, но скрыт. Идея, которую я имею, состоит в том, что div с формой в, чтобы сделать запрос ajax, метод действия контроллера определяет, действительна ли модель, , если недействительно, повторно отправьте одно и то же содержимое формы (один частичный вид с содержимое формы), но с ошибками проверки; , если модель действительна, она возвращает другое содержимое частичного просмотра с помощью простого «спасибо» и отображается в div, и она должна скрывать div, который имеет форму. Я не знаю, как я могу это сделать ??? Моя идея состоит в том, что событие onSuccess для @ ajax.beginform имеет параметр, html, возвращаемый сервером, но не знает, какой контент возвращает сервер, т. Е. Я не знаю, что такое div. Помоги мне, пожалуйста.Обновление DIV с контентом по запросу AJAX

PD: если вопрос непонятен, дайте мне знать, и я приведу пример.

[[[[[[UPDATE]]]]]]

У меня есть модель:

public class Message{

public int MessageID { get; set; } 

    [Required] 
    public string From { get; set; } 

    [Required] 
    public string Content { get; set; } 
} 

У меня есть контроллер:

public class MessageController : Controller{

public ActionResult Index() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult saveMessage(Message msg) { 
     // (ModelState.IsValid) 
     if (!msg.From.Contains("@")) { 

      ModelState.AddModelError("From", "The mail must contain an @"); 
      return PartialView("DataMsg", msg); 
     } 

     return RedirectToAction("thanks"); 
    } 

    public PartialViewResult thanks() { 
     return PartialView(); 
    } 
} 

и мои просмотры:

Index.cshtml:

@model MvcApplication1.Models.Message

@{ 
    ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 

@section scripts{ 
    <script> 
     function successMsg(data) { 
     // I want the "thank you" is displayed in the div with id="thanksUpdate" and not in #formUpdate 
      $("#formUpdate").html(data); 
     } 
    </script> 
} 

@using (Ajax.BeginForm("saveMessage", 
    new AjaxOptions { HttpMethod="Post", OnSuccess="successMsg"})) { 
    <div id="formUpdate"> 
     @Html.Partial("DataMsg", Model); 
    </div> 
} 


<div id="thanksUpdate" style="display:none;"> 
</div> 

DataMsg.cshtml:

@model MvcApplication1.Models.Message

@Html.LabelFor(m => m.From) 
@Html.EditorFor(m => m.From) 
@Html.ValidationMessageFor(m => m.From) 

@Html.LabelFor(m => m.Content) 
@Html.EditorFor(m => m.Content) 
@Html.ValidationMessageFor(m => m.Content) 

<input type="submit" value="Send" /> 

и thanks.cshtml:

Я хочу, чтобы «спасибо» отображается в div с id = «thanksUpdate», а не в #formUpdate. Как я могу это сделать ???

+0

Отправка данных на сервер и сервер обработки данных, которые он получает 2 совершенно разные предметы. Если у вас есть код, вы должны его опубликовать. –

+0

Привет, Джон, я добавлю необходимый код – Marlonchosky

ответ

0

ну, я нашел способ исправить было отправить куки-файл в ответ от моего контроллера, а клиентская сторона увидит отправленное значение, если значение 501, redisplays тот же div, иначе он показан в другой div. Я не знаю, является ли это хорошим решением. Пожалуйста, любой ответ поможет.

В контроллере:

[HttpPost]  
public ActionResult saveMessage(Message msg) {              

    if (!msg.From.Contains("@")) { 
     ModelState.AddModelError("From", "The mail must contain an @"); 
     Response.Cookies.Add(new HttpCookie("resultado", "501")); 
     return PartialView("DataMsg", msg); 
    } 

    return RedirectToAction("thanks"); 
} 

public PartialViewResult thanks() { 

    Response.Cookies.Add(new HttpCookie("resultado", "502")); 
    return PartialView(); 
} 

В вид Index.cshtml:

@section scripts{

<script> 
    function successMsg(data) { 
     //alert(data); 
     var c = $.cookie("resultado"); 

     if (c == '501') { 
      $("#formUpdate").html(data); 
     } else { 
      $("#thanksUpdate").html(data).show(); 

      $("#formUpdate").hide(); 
     } 
    } 
</script> 
} 

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