当我在控制器中的方法内访问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对象中做同样的事情。
答案 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 };