我正在使用 Ajax.BeginForm()和 UpdateTargetId 。但是,当用户成功完成表单并完成处理后,我想将它们重定向到一个全新的页面。
调用RedirectToAction()并从那里返回一个视图不起作用,因为它以id为目标。
我还需要将参数传递给动作。所以我唯一的选择是进行JavaScript调用:
return JavaScript("window.location = 'http://www.somewhere.com/blah/blah?aMyParam=123'");
有更优雅的方法吗?
答案 0 :(得分:1)
虽然您的工作方式是正确的,但更优雅的方法如下所示: -
控制器 -
[HttpPost]
public ActionResult MyAction(MyModel model)
{
if (model.SomeCondition)
{
// return to the client the url to redirect to
return Json(new { url = Url.Action("MyAction2") });
}
else
{
return PartialView("_MyPartialView");
}
}
查看 -
@using (Ajax.BeginForm("MyAction", "MyController", new AjaxOptions { OnSuccess = "onSuccess", UpdateTargetId = "foo" }))
{
...
}
Javascript -
var onSuccess = function(result) {
if (result.url) {
window.location.href = result.url;
}
}
如上所示,您可以从控制器操作返回Json
(有url),然后从onSuccess
javascript函数重定向。