【问题标题】:Initializing ViewData property inside ViewResult object在 ViewResult 对象中初始化 ViewData 属性
【发布时间】:2016-12-02 05:32:32
【问题描述】:

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

【问题讨论】:

    标签: asp.net-mvc viewdata viewresult


    【解决方案1】:

    我自己尝试过,对MVC框架的内部工作原理有所了解,如果我错了,请纠正我,并提供解释,这将有助于更多地了解框架。

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

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

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

    当我们处理 ViewResult 类的 ViewData 属性时,我们不能赋值,这样 ViewData["key"]="some value" 因为它需要 ViewDataDictionary 对象。但是我们可以这样做来分配这样的值

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-28
      • 1970-01-01
      • 2016-01-12
      • 1970-01-01
      • 2013-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多