0

您好,我的问题是:我有两个 div,一个 div 包含 @ajax.beginform,另一个 div 为空但隐藏。我的想法是带有表单的div,为了发出ajax请求,控制器的action方法检测模型是否有效,如果无效,重新发送表单的相同内容(一个partialview,内容为表单)但存在验证错误;如果模型有效,它返回另一个带有简单“谢谢”的部分视图内容并显示在 div 中是隐藏的,那么它应该隐藏具有表单的 div。我不知道我该怎么做???我的想法是@ajax.beginform 的onSuccess 事件作为参数,服务器返回的html,但不知道返回服务器的内容是什么,即不知道显​​示什么div。请帮帮我。

PD:如果问题不明白,请告诉我,我会举个例子。

[[[[[[更新]]]]]]

我有一个模型

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();
    }
}

和我的看法:

索引.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>

数据消息.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" />

感谢.cshtml

<h2>Thank you</h2>

我希望“谢谢”显示在 id="thanksUpdate" 的 div 中,而不是在 #formUpdate 中。我怎么能这样???

4

1 回答 1

0

好吧,我找到了一种解决方法是在我的控制器的响应中发送一个 cookie,客户端看到发送的值,如果值为 501,则重新显示相同的 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>
}

于 2013-10-10T03:48:52.060 回答