ASP.NET MVC:正在将部分视图中的错误重定向为主视图
本文关键字:视图 错误 重定向 主视图 MVC NET ASP | 更新日期: 2023-09-27 18:29:15
我有一个通过Ajax刷新的部分。
查看Javascript:
$("#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);
}
});
}
});
刷新操作:
[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异常)时,当我希望将错误视图显示为主视图时,会将其发送到分部视图。
错误操作:
public ActionResult Error(string message)
{
ViewBag.Message = message;
return View();
}
我曾尝试使用Javascript(在视图中和控制器返回)重定向浏览器,但两者都有缺陷,我认为这是一种糟糕的做法。
尝试作为
$("#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
}
});
}
});
假设Error()
返回一个完整的视图(带有布局和script/css),您总是可以尝试完全覆盖您的文档:
success: function (result) {
$('#partialHolder').html(result);
},
error: function(xhr) {
if(xhr.responseText) {
var newDoc = document.open("text/html", "replace");
newDoc.write(xhr.responseText);
newDoc.close();
}
}
这将有效地覆盖您的整个dom,将导致您丢失页面上的所有内容。
文档重写到此答案的学分
试试这样的
在你的行动
[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);
}
}
所以在您的ajax成功
if (result != null) {
//do your stuff
} else {
// the controller action returned a partial
$('#divInYourMain').html("Error 123");
}
我设法以类似于Law答案的方式解决了这个问题,通过使用try/catch块和Content
helper方法返回一个触发重定向的简单字符串。
刷新操作:
[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");
}
}
查看Javascript:
$("#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);
}
}
});
}
});