2016-04-12 36 views
0

我在幫助器類中有try-catch段。如果try catch段引發錯誤,我想返回一個視圖。現在我有:從Mvc 5中的幫助器類返回視圖

try 
{ 
    //some code 
} 
catch (Exception ex) 
{ 
    return View("~/Views/Home/Index.cshtml"); 
} 
+2

你到底在問什麼? –

+0

我想返回視圖〜/ Views/Home/Index.cshtml 因爲我在幫助類而不是控制器,所以返回View(「〜/ Views/Home/Index.cshtml」);不起作用 –

+0

您是否允許將異常備份回控制器,以便它可以處理它並執行重定向? – Draken

回答

2

有兩種方式:
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的任務和職責。

+0

問題是,當用戶在索引視圖中單擊按鈕時可能會發生異常。我可以通過使用局部視圖來解決這個問題,但我不想。有沒有辦法從助手類調用控制器?(該項目已經是意大利麪代碼,所以它不一定是最佳實踐) –

+0

我想我找到了一種方法來使用你的方法。讓我試試吧:) –

+0

工作就像一個魅力:) –

0

試試這個:

try 
{ 

} 
catch (System.Exception) 
{ 
    return RedirectToAction("Index", "Home"); 
} 
+0

我收到消息重定向到操作在當前上下文中不存在。可能是因爲我不是在控制器中,而是在助手類中。 –

+0

您應該嘗試從控制器捕獲並重定向。 – Remay

+0

在這種情況下,我不敢這樣做。我正在使用System.Xml; 和System.ServiceModel.Syndication ;.當我開始一個新項目時,VS遇到了問題,找不到正確的system.xml版本,所以現在我不敢去觸及那段代碼。可能太偏執:) –