RedirectToAction返回类型错误

时间:2014-05-05 11:42:43

标签: asp.net-mvc

我正在开发MVC4中的Web应用程序。 我需要一个自定义错误页面。 我想从许多函数的try-catch块重定向到错误页面。

我想使用“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值。 我知道我可以将它作为out参数传递。但就我而言,我必须将其传递到3-4级。很多丑陋的代码。

2 个答案:

答案 0 :(得分:0)

我是这个方法的 try 命名约定的粉丝:

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); 
}

答案 1 :(得分:0)

决定使用自定义异常。

  1. 为errorObj
  2. 创建例外类
  3. 更新并从catch块中抛出
  4. 在父类中抓住它
  5. 使用errorObj重定向到自定义错误页面。
  6. 不确定这是一个好习惯,但它确实有效。

    感谢大家的支持和努力。