ASP.NET MVC: Redirecting errors in partial to main view
我有一个通过Ajax刷新的部分。
查看javascript:
1 2 3 4 5 6 7 8 9 10 11 12 13 | $("#SelectedId").change(function () { var id = $("#SelectedId").val(); if (id > 0) { $.ajax({ url:"/Home/Refresh", data: { id: id }, type:"POST", success: function (result) { $('#partialHolder').html(result); } }); } }); |
刷新动作:
1 2 3 4 5 6 7 8 9 10 | [HttpPost] public ActionResult Refresh(int id) { HomeViewModel model = new HomeViewModel(); model.id = id; ViewBag.id = model.id; PrepareModel(ref model); return PartialView("~/Views/PartialView.cshtml", model); } |
这很好地工作,除了当发生错误(如HTTP异常)时,当我希望将错误视图显示为主视图时,它将被发送到分部。
错误动作:
1 2 3 4 5 | public ActionResult Error(string message) { ViewBag.Message = message; return View(); } |
我尝试使用javascript(视图中的和控制器返回的)来重定向浏览器,但是这两种方法都有缺陷,我认为这是不好的做法。
我打算用一种类似于法律答案的方式来解决这一问题,使用一个测试/按钮块和EDOCX1&1
Refresh Action:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | [HttpPost] public ActionResult Refresh(int id) { try { HomeViewModel model = new HomeViewModel(); model.id = id; ViewBag.id = model.id; PrepareModel(ref model); return PartialView("~/Views/PartialView.cshtml", model); } catch { return Content("error"); } } |
View Javascript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | $("#SelectedId").change(function () { var id = $("#SelectedId").val(); if (id > 0) { $.ajax({ url:"/Home/Refresh", data: { id: id }, type:"POST", success: function (result) { if (result =="error") { location.replace("@Url.Action("General","Error")"); } else { ('#partialHolder').html(result); } } }); } }); |
尝试这样的东西
在你的行动中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | [HttpPost] public ActionResult Refresh(int id) { try { HomeViewModel model = new HomeViewModel(); model.id = id; ViewBag.id = model.id; PrepareModel(ref model); return PartialView("~/Views/PartialView.cshtml", model); } catch { return PartialView("~/Views/PartialView.cshtml", null); } } |
所以在你的成功中
1 2 3 4 5 6 | if (result != null) { //do your stuff } else { // the controller action returned a partial $('#divInYourMain').html("Error 123"); } |
复制这个网站码到您的网站上以设置一个投票箱在您的网站上。
ZZU1
这将有效地超越你的整个房间,并将导致你失去在页面上的一切。
Credits for document rewrite to this answer
尝试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | $("#SelectedId").change(function () { var id = $("#SelectedId").val(); if (id > 0) { $.ajax({ url:"/Home/Refresh", data: { id: id }, type:"POST", success: function (result) { $('#partialHolder').html(result); }, error: function(result){ //call new action } }); } }); |