Ajax Postback - 再次渲染完整视图

时间:2016-04-04 06:11:10

标签: c# asp.net ajax asp.net-mvc

我正在使用 Ajax.BeginForm() UpdateTargetId 。但是,当用户成功完成表单并完成处理后,我想将它们重定向到一个全新的页面。

调用RedirectToAction()并从那里返回一个视图不起作用,因为它以id为目标。

我还需要将参数传递给动作。所以我唯一的选择是进行JavaScript调用:

return JavaScript("window.location = 'http://www.somewhere.com/blah/blah?aMyParam=123'");

有更优雅的方法吗?

1 个答案:

答案 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函数重定向。