2016-12-02 63 views
0

当我访问控制器中的方法内部的ViewData时,我能够以字典ie的形式分配值。初始化ViewResult对象内部的ViewData属性

ViewData["message"]="this is a custom message"; 

但我进入一个场景,我试图处理MVC中的异常,这里是我的代码:

public void OnException(ExceptionContext filterContext) 
     { 
      if (!filterContext.ExceptionHandled && (filterContext.Exception is ArgumentOutOfRangeException)) 
      { 
       filterContext.Result = new ViewResult { ViewName = "Error", ViewData = }; 
       filterContext.ExceptionHandled = true; 
      } 
     } 

现在处理异常时,我想传递一个消息到错误页面,所以试图访问ExceptionContext的Result属性。 现在

我的问题是,为什么我不能够在 分配一个值的ViewData字典,像这里的格式

filterContext.Result = new ViewResult { ViewName = "Error", ViewData = }; 

这也是返回的ViewDataDictionary对象的属性,当我能够像这样在Controller方法中分配一个值ViewData [“message”] =“参数异常错误”;为什么我不能在ViewResult对象里面做同样的事情。

回答

0

我自己尝试过并了解了MVC框架的内部工作原理,如果我错了请更正我的错误,请提供解释,以便了解有关框架的更多信息。

当我在控制器访问ViewData的一个方法中,我能够 在字典的形式

这是因为当我们调用控制器和方法,MVC采用赋值负责将对象分配给所有属性,这就是我们可以为方法内的ViewData赋值的原因。

filterContext.Result = new ViewResult {ViewName =“Error”,ViewData = };

当我们对付的ViewResult类的ViewData的属性,我们不能分配的价值,这样计算机[“钥匙”] =“一些价值”,因为它需要的ViewDataDictionary对象。但我们可以这样做来分配这样的值

var d = new ViewDataDictionary(); 
       d["key"] = "some value"; 
       filterContext.Result = new ViewResult { ViewName = "Error",ViewData=d };