2014-05-05 148 views
0

我正在開發一個MVC4中的Web應用程序。 我需要一個自定義錯誤頁面。 我想重定向到許多函數的try-catch塊的錯誤頁面。RedirectToAction返回類型錯誤

我想使用「RedirectToAction」來做到這一點。

問題出在返回類型。我的函數使用不同的返回類型。 舉例

private UserDetails getUserInfo(string userId) 
{ 
    UserDetails _userDetails = new UserDetails(); 
    try 
    {    
     //Do something 
    } 
    catch (Exception ex) 
    {     
     return RedirectToAction("customErrorPage", "CreateKit", errorObj); 
    } 
    return _userDetails; 
} 

上述函數應該返回UserDetails對象。因此它顯示了RedirectToAction行中的錯誤。 使用對象類型不是我相信的一個好習慣。

如何解決這個問題?

除了RedirectToAction之外,還有其他的選擇嗎?

注意: - 所有函數的RedirectToAction參數「errorObj」不相同。所以如果我在函數外部處理RedirectToAction,那麼我還需要獲取errorObj值。 我知道我可以通過它作爲一個輸出參數。但就我而言,我必須通過3-4級。很多醜陋的代碼。

+0

你可以添加一個屬性在類作爲標誌,並設置它在捕獲並返回它, –

+0

,這是你的動作? –

回答

0

我是的粉絲嘗試這樣的方法命名約定:

private bool TryGetUserInfo(string userId, out userDetails) 
{ 
    bool result = false; 
    UserDetails _userDetails = new UserDetails(); 
    try 
    {    
     //Do something 

     userDetails = _userDetails.GetDetails(); 
     result = true; 
    } 
    catch (Exception ex) 
    {    
     Logger.LogError(ex); 
    } 

    return result; 
} 


public ActionResult SomeMethod() 
{ 
    UserDetails userDetails; 

    if (TryGetUserInfo("asdf", out userDetails)) 
    { 
    return View(userDetails); 
    } 
    else 
    { 
    return GetErrorResult(); 
    } 
} 

public ActionResult SomeOtherMethod() 
{ 
    if (TryGetSomethingElse()) 
    { 
    return View(); 
    } 
    else 
    { 
    return GetErrorResult(); 
    } 
} 

// reusable error message for this controller 
// could derive of all controllers and change it depending 
// on the controller 
private ActionResult GetErrorResult() 
{ 
    return RedirectToAction("customErrorPage", "CreateKit", errorObj); 
} 
+0

感謝Erik的評論。但在我的情況下,「errorObj」的值對所有函數都是唯一的。請檢查我在問題中添加的評論。 – Mahesh

+0

真的很難修改我的'GetErrorresult()'傳遞'errorObj'嗎? –

0

決定使用自定義異常。

  1. 爲errorObj
  2. 更新創建一個異常類和父類
  3. 重定向到與errorObj自定義錯誤頁從catch塊扔
  4. 抓住它。

不知道這是一個很好的做法,但它的工作原理。

感謝大家的支持和努力。