我正在使用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中,因此我最终在页面中找到一个页面。我在考虑两件事:我要么在构造这个错误,要么应该以不同的方式处理这种类型的操作(不使用Ajax)。而不是返回重定向结果,而是返回其中包含JavaScript的视图,该视图在客户端进行重定向。有人对#1有意见吗?或者,如果#2是一个好的解决方案,那么“重定向javascript视图”会是什么样?
3 回答
UYOU
TA贡献1878条经验 获得超4个赞
您可以返回带有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属性可以指示这种情况并避免重定向。
- 3 回答
- 0 关注
- 690 浏览
添加回答
举报
0/150
提交
取消