MVC Razor - 如何从ActionResult返回警报(错误或成功)消息并保留在相同的部分视图中

时间:2013-09-16 09:33:58

标签: jquery asp.net-mvc asp.net-mvc-4 razor

我正在从索引页面打开一个弹出窗口,如下所示:

@Html.ActionLink(ButtonName, "CreateNode", "Node", new { ID = value.ID, }, new { @class = "openCreateDialog", data_dialog_title = ButtonName })

$(".openCreateDialog").unbind('click').bind("click", function (e) {
        e.preventDefault();

        $("<div></div>")
            .addClass("dialog")
            .attr("id", $(this))
            .appendTo("body")
            .dialog({
                title: $(this).attr("data-dialog-title"),
                close: function () { $(this).remove(); },
                modal: true,
                resizable: false,
                height: 350,
                width: 560,
                left: 0,
                buttons: {
                    "Save": function () {
                        $(".btnSave").trigger('click');
                    },
                    "Close": function () {
                        $(this).dialog("close");
                    }
                }
            })
            .load(this.href);
    });

从上面的代码中我打开了一个jquery弹出窗口。

在弹出窗口中我有以下代码

using (Html.BeginForm("SaveData", "Home", FormMethod.Post, new { enctype = "multipart/form-data", id = "NodeForm" }))
{
<input type="file" name="file"/>
<input type="text" name="text"/>
<input type="submit" id="btnSave" value="Save" class="btnSave" style="display: none" />}

在Home Controller中我将数据保存为

[HttpPost]
    public ActionResult SaveData(FormCollection collections, HttpPostedFileBase file)
    {
        try
        {
            string sourceFilePath = Path.Combine("c:/Test", Path.GetFileName(file.FileName));
            file.SaveAs(sourceFilePath);
            return View();
        }
        catch (Exception ex)
        {
            return ex.Message;
        }
    }

此处在动作控制器中,如果成功,我想返回“成功”消息,或者返回带有警报的“失败”消息,并保留在与数据相同的弹出窗口中。

3 个答案:

答案 0 :(得分:1)

//ajax post request
$.ajax({
    url: "/SomeController/SendAjaxPost",
    data: { 'id': 1 },
    dataType: "json",
    type: "POST",
    contentType: 'application/json; charset=utf-8',
    success: function (data) {
        if (data) {
            if (data.Message) {
                alert(data.Message);
            }
        }
    }
});


//and Controller side c#
[HttpPost]
        public JsonResult SendAjaxPost(int id = 0)
        {
            string msg = "";
            if (id == 1)
            {
                //some logic here
                msg = "success";
            }
            else
            {
                msg = "failure";
            }

            return Json(new { Message = msg });
        }

//或第二个例子是:

@using (Ajax.BeginForm("SaveData", "Home", 
                       new AjaxOptions
                           {
                               UpdateTargetId = "TargetId",
                               HttpMethod = "post",
                               OnSuccess = "AnyOnCuccessMethod",
                               OnFailure = "AnyOnFailureMethod"
                           }, new {id = "ajaxForm"}))
{
    <div id="TargetId">
         <input type="submit" value="Save" />
    </div>
}

你可以调用OnCuccess和OnFailure事件任何javascript函数

答案 1 :(得分:0)

当我不使用脚本参考

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>

我正在获取HttpPostedFileBase并保存文件。但它没有触发AjaxOptions“OnSuccess”脚本。

当我使用脚本引用时

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>

我将HttpPostedFileBase视为null。但是它触发了AjaxOptions“OnSuccess”脚本。

答案 2 :(得分:0)

当我不使用脚本参考

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>

我正在获取HttpPostedFileBase并保存文件。但它没有触发AjaxOptions“OnSuccess”脚本。

当我使用脚本引用时

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>

我将HttpPostedFileBase视为null。但是它触发了AjaxOptions“OnSuccess”脚本。

以下是我正在使用的代码。

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")"     type="text/javascript"></script>
<script type="text/javascript">
function OnSuccess(data) {
    if (data) {
        if (data.Message) {
            alert(data.Message);
        }
    }
}

function OnFailure(response) {
    alert("OnFailure");
}

@using (Ajax.BeginForm("SaveData", "Node", new AjaxOptions { UpdateTargetId = "targetDiv", HttpMethod = "POST", OnSuccess = "OnSuccess", OnFailure = "OnFailure" }, new { enctype = "multipart/form-data" }))
{
<div id="targetDiv">
    <input type="file" name="file" />
    <input type="text" name="text" />
    <input type="submit" id="btnSave" value="Save" class="btnSave" style="display: none" />
</div>
 }

在Controller中我使用以下代码。

[HttpPost]
    public JsonResult SendData(FormCollection col,HttpPostedFileBase   file)
    {
        string msg = "";
        if (id == 1)
        {
            //some logic here
            msg = "success";
        }
        else
        {
            msg = "failure";
        }

        return Json(new { Message = msg });
    }