0

当我在控制器的方法中访问 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"] = "argument exception error"; 为什么我不能在ViewResult 对象中做同样的事情。

4

1 回答 1

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 };
于 2016-12-02T08:49:57.930 回答