我遇到Ajax.BeginForm问题。我有一个表单,提交和按钮更新部分视图。
我想要完成的是我可以在同一个Action中使用以下return语句。
// button activates this
return PartialView("PartialViewName", data);
和
// submit activates this
return Redirect(model.Url);
现在问题是Redirect导致Ajax.BeginForm
出现问题<% using (Ajax.BeginForm("Action", "Controller", new AjaxOptions { OnSuccess = "OnSuccess", UpdateTargetId = "Container", InsertionMode = InsertionMode.Replace }, new { id = "eventAjaxForm" })) { %>
我如何识别结果是PartialView还是重定向用户?
答案 0 :(得分:2)
通常,当您对控制器操作执行AJAX调用时,将遵循任何重定向,直到客户端获得200状态代码或错误。因此,您重定向到的网址的HTML将放在Container
div中。另一方面,在您的控制器操作中,您可以使用Request.IsAjaxRequest()
测试调用是否异步并返回部分调用。
答案 1 :(得分:1)
如果您正在使用Post Redirect Get模式,则需要将Request.IsAjaxRequest()与TempData结合使用,即,您在TempData中保留Request.IsAjaxRequest()的结果,这样,当您获得重定向请求,您可以检查TempData以查看它是否是原始Ajax请求的结果。
Steven Sandersons关于Pro ASP.NET MVC 2的书中对此进行了解释。
答案 2 :(得分:0)
谢谢你们的答案,但我能用其他解决方案解决问题。
我为提交和部分视图单独执行了操作。使用以下jQuery方法完成部分视图更新。
$('.class').click(function () {
var form = $("#eventForm").serialize();
$.post("/Controller/Action",
{
form
},
function (result) {
$('#container').html(result);
}
);
});
并使用“正常”提交按钮完成提交。