2014-05-05 125 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. 抓住它。

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

感谢大家的支持和努力。