我在幫助器類中有try-catch段。如果try catch段引發錯誤,我想返回一個視圖。現在我有:從Mvc 5中的幫助器類返回視圖
try
{
//some code
}
catch (Exception ex)
{
return View("~/Views/Home/Index.cshtml");
}
我在幫助器類中有try-catch段。如果try catch段引發錯誤,我想返回一個視圖。現在我有:從Mvc 5中的幫助器類返回視圖
try
{
//some code
}
catch (Exception ex)
{
return View("~/Views/Home/Index.cshtml");
}
有兩種方式:
1.(再)扔在助手異常+添加異常處理的控制器或
2.在助手中捕獲異常,返回例如一個bool標誌成功/失敗+在控制器中響應這個值。
1的方法:
MyController.cs
public ActionResult Index()
{
try
{
MyHelper.SomeMethod(); // This method is allowed to throw
return View(); // No view name specified means this renders "Index"
}
catch (Exception ex)
{
return View("Error");
}
}
第二個辦法:
MyController.cs
public ActionResult Index()
{
bool succeeded = MyHelper.SomeFunction(); // This method should never throw
if (succeeded)
return View(); // No view name specified means this renders "Index"
else
return View("Error");
}
此外,儘量避免在視圖中調用助手,除非您的視圖可以處理所有結果。當一個View已經在執行時,你不能簡單地將它切換到另一個視圖,這將是Controller的任務和職責。
問題是,當用戶在索引視圖中單擊按鈕時可能會發生異常。我可以通過使用局部視圖來解決這個問題,但我不想。有沒有辦法從助手類調用控制器?(該項目已經是意大利麪代碼,所以它不一定是最佳實踐) –
我想我找到了一種方法來使用你的方法。讓我試試吧:) –
工作就像一個魅力:) –
試試這個:
try
{
}
catch (System.Exception)
{
return RedirectToAction("Index", "Home");
}
我收到消息重定向到操作在當前上下文中不存在。可能是因爲我不是在控制器中,而是在助手類中。 –
您應該嘗試從控制器捕獲並重定向。 – Remay
在這種情況下,我不敢這樣做。我正在使用System.Xml; 和System.ServiceModel.Syndication ;.當我開始一個新項目時,VS遇到了問題,找不到正確的system.xml版本,所以現在我不敢去觸及那段代碼。可能太偏執:) –
你到底在問什麼? –
我想返回視圖〜/ Views/Home/Index.cshtml 因爲我在幫助類而不是控制器,所以返回View(「〜/ Views/Home/Index.cshtml」);不起作用 –
您是否允許將異常備份回控制器,以便它可以處理它並執行重定向? – Draken