在ViewResult对象中初始化ViewData属性

时间:2016-12-02 05:32:32

标签: asp.net-mvc viewdata 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"] ="参数异常错误&# 34 ;; 为什么我无法在 ViewResult对象中做同样的事情。

1 个答案:

答案 0 :(得分:0)

我自己尝试了解并了解了MVC框架的内部工作原理,如果我错了请纠正我,请为其提供解释,以便更多地了解框架。

  

当我在控制器中的方法内访问ViewData时,我能够   以字典

的形式分配值

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

  

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

当我们处理ViewResult类的ViewData属性时,我们无法以这种方式分配值 ViewData [“key”] =“some value”,因为它需要 ViewDataDictionary 对象。但是我们可以这样做来分配像这样的值

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