我正在从索引页面打开一个弹出窗口,如下所示:
@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;
}
}
此处在动作控制器中,如果成功,我想返回“成功”消息,或者返回带有警报的“失败”消息,并保留在与数据相同的弹出窗口中。
答案 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 });
}