Jef*_*mer 83 c# ajax asp.net-mvc asp.net-mvc-ajax
我正在使用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]
}
Run Code Online (Sandbox Code Playgroud)
如果删除成功,我将返回重定向结果:
[Authorize]
public ActionResult Delete(Int32 UserId)
{
UserRepository.DeleteUser(UserId);
return Redirect(Url.Action("Index", "Home"));
}
Run Code Online (Sandbox Code Playgroud)
但是Home Controller Index视图已加载到UpdateTargetId中,因此我最终得到了页面中的页面.我正在考虑的两件事:
有人对#1发表评论吗?或者,如果#2是一个很好的解决方案,那么"重定向javascript视图"会是什么样子?
Ben*_*ter 168
你可以用它JavascriptResult来实现这一目标.
重定向:
return JavaScript("window.location = 'http://www.google.co.uk'");
Run Code Online (Sandbox Code Playgroud)
要重新加载当前页面:
return JavaScript("location.reload(true)");
Run Code Online (Sandbox Code Playgroud)
似乎是最简单的选择.
Fra*_*ein 25
您可以使用URL返回JSON,并在客户端使用JavaScript更改window.location.我更喜欢这种方式,而不是从服务器调用JavaScript函数,我认为它打破了关注点的分离.
服务器端:
return Json(new {result = "Redirect", url = Url.Action("ActionName", "ControllerName")});
Run Code Online (Sandbox Code Playgroud)
客户端:
if (response.result == 'Redirect')
window.location = response.url;
Run Code Online (Sandbox Code Playgroud)
当然,您可以添加更多逻辑,因为服务器端可能存在错误,在这种情况下,result属性可以指示这种情况并避免重定向.
Jos*_*eph 12
您尝试生成的行为并不是最好使用AJAX完成的.如果您只想更新页面的一部分,而不是完全重定向到其他页面,则最好使用AJAX.这真的打败了AJAX的整个目的.
我建议不要将AJAX与你描述的行为一起使用.
或者,您可以尝试使用jquery Ajax,它将提交请求,然后在请求完成时指定回调.在回调中,您可以确定它是失败还是成功,并在成功时重定向到另一个页面.我发现jquery Ajax更容易使用,特别是因为我已经将这个库用于其他东西了.
你可以在这里找到关于jquery ajax的文档,但语法如下:
jQuery.ajax( options )
jQuery.get( url, data, callback, type)
jQuery.getJSON( url, data, callback )
jQuery.getScript( url, callback )
jQuery.post( url, data, callback, type)
Run Code Online (Sandbox Code Playgroud)
Val*_*mas 12
虽然不优雅,但在某些情况下适合我.
调节器
if (RedirectToPage)
return PartialView("JavascriptRedirect", new JavascriptRedirectModel("http://www.google.com"));
else
... return regular ajax partialview
Run Code Online (Sandbox Code Playgroud)
模型
public JavascriptRedirectModel(string location)
{
Location = location;
}
public string Location { get; set; }
Run Code Online (Sandbox Code Playgroud)
/Views/Shared/JavascriptRedirect.cshtml
@model Models.Shared.JavascriptRedirectModel
<script type="text/javascript">
window.location = '@Model.Location';
</script>
Run Code Online (Sandbox Code Playgroud)
使用JavaScript肯定会完成这项工作.
Content如果这更符合您的风格,您也可以使用.
例:
MVC控制器
[HttpPost]
public ActionResult AjaxMethod()
{
return Content(@"http://www.google.co.uk");
}
Run Code Online (Sandbox Code Playgroud)
使用Javascript
$.ajax({
type: 'POST',
url: '/AjaxMethod',
success: function (redirect) {
window.location = redirect;
}
});
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以简单地在 Ajax Success 中编写,如下所示:
$.ajax({
type: "POST",
url: '@Url.Action("GetUserList", "User")',
data: { id: $("#UID").val() },
success: function (data) {
window.location.href = '@Url.Action("Dashboard", "User")';
},
error: function () {
$("#loader").fadeOut("slow");
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
115752 次 |
| 最近记录: |