关于javascript:ASP.NET MVC:将部分错误重定向到主视图

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
      }
    });
  }
});