我正在使用Ajax.BeginForm创建一个表单,该表单将对某个控制器操作执行ajax回发,然后如果操作成功,用户应该被重定向到另一个页面(如果操作失败,则使用AjaxOptions UpdateTargetId显示状态消息)。
using (Ajax.BeginForm("Delete", null,
new { userId = Model.UserId },
new AjaxOptions { UpdateTargetId = "UserForm", LoadingElementId = "DeletingDiv" },
new { name = "DeleteForm", id = "DeleteForm" }))
{
[HTML DELETE BUTTON]
}
如果删除成功,我将返回一个重定向结果:
[Authorize]
public ActionResult Delete(Int32 UserId)
{
UserRepository.DeleteUser(UserId);
return Redirect(Url.Action("Index", "Home"));
}
但是Home Controller Index视图正在加载到UpdateTargetId中,因此我最终得到了一个页面中的一个页面。我在想两件事:
有人对#1有什么意见吗?或者,如果#2是一个很好的解决方案,那么“重定向javascript视图”会是什么样子呢?
发布于 2011-08-16 03:59:06
您可以使用JavascriptResult
来实现这一点。
要重定向:
return JavaScript("window.location = 'http://www.google.co.uk'");
要重新加载当前页面,请执行以下操作:
return JavaScript("location.reload(true)");
似乎是最简单的选择。
发布于 2014-07-10 23:35:46
您可以返回一个带有URL的JSON,并在客户端使用JavaScript更改window.location。我更喜欢这种方式,而不是从服务器调用JavaScript函数,我认为这打破了关注点的分离。
服务器端:
return Json(new {result = "Redirect", url = Url.Action("ActionName", "ControllerName")});
客户端:
if (response.result == 'Redirect')
window.location = response.url;
当然,您可以添加更多的逻辑,因为在服务器端可能会出现错误,在这种情况下,result属性可以指示这种情况并避免重定向。
发布于 2011-07-12 13:41:51
虽然不优雅,但在某些情况下对我来说是有效的。
控制器
if (RedirectToPage)
return PartialView("JavascriptRedirect", new JavascriptRedirectModel("http://www.google.com"));
else
... return regular ajax partialview
模型
public JavascriptRedirectModel(string location)
{
Location = location;
}
public string Location { get; set; }
/Views/Shared/JavascriptRedirect.cshtml
@model Models.Shared.JavascriptRedirectModel
<script type="text/javascript">
window.location = '@Model.Location';
</script>
https://stackoverflow.com/questions/1538523
复制相似问题