我的视图中有一个devexpress按钮,只适用于javascript。 所以我需要通过这个点击事件调用一个Action。
我的剧本:
function OnCommandExecuted(s, e) {
if (e.item.name == "SendData") {
$.post("/Product/ExportData");
}
}
当我点击此按钮时,Action / Product / ExportData会执行,但不会给我任何回报。我的行动:
public ActionResult ExportData()
{
return RedirectToAction("Test");
}
public ActionResult Test()
{
return RedirectToAction("Login", "Account");
}
因此,两个操作都已执行,但网站不会更改为相应的视图。它保留在单击按钮的原始视图上。
如何更改为相应的操作视图?
答案 0 :(得分:2)
默认情况下,AJAX调用无法进行浏览器重定向。不是在服务器上重定向,而是将URL作为JSonResult发送,并使用客户端JQuery捕获该URL并进行重定向,如下所示 -
让你的控制器动作返回Json,如下所示 -
public ActionResult GetJson()
{
return new JsonResult() { Data = "http://www.google.com",JsonRequestBehavior = JsonRequestBehavior.AllowGet };
}
然后从JQuery调用此控制器操作,如下所示 -
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script>
function submitForm() {
jQuery.ajax({
type: "POST",
url: "@Url.Action("GetJson")",
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (data) {
window.location.href = data;
},
failure: function (errMsg) {
alert(errMsg);
}
});
}
</script>
<input type="button" value="Click" onclick="submitForm()" />
因此,当您单击该按钮时,将对控制器操作执行POST操作,并且将在Success函数中捕获返回URL。然后使用window.location.href,我们进行浏览器重定向。
修改强>
构建网址的一种方法 -
UrlHelper h = new UrlHelper(ControllerContext.HttpContext.Request.RequestContext);
string str = h.Action("action", "controller", null);
return new JsonResult() { Data = str,JsonRequestBehavior = JsonRequestBehavior.AllowGet };
或者同时您可以使用Uri class in C#