【问题标题】:Data I pass from ActionFilter via ViewBag not accessible in View我通过 ViewBag 从 ActionFilter 传递的数据在 View 中无法访问
【发布时间】:2015-12-04 08:51:15
【问题描述】:

我想将一些信息从自定义操作过滤器传递到视图。我像这样使用 ViewBag,但在视图中,ViewBag.TitleViewBag.Message 属性都评估为 null

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    ...

    filterContext.Controller.ViewBag.Title = "Session Expired";
    filterContext.Controller.ViewBag.Message = "Your session has expired. Please login again.";
    filterContext.Result = 
            new ViewResult 
            { 
              ViewName = "~/Views/Shared/Info.cshtml" 
            };
}

在视图中

<div class="row">
        <div class = 
             "col-lg-8 col-md-8 col-sm-8 col-xs-12 
              col-lg-offset-2 col-md-offset-2 col-sm-offset-2 
              col-xs-offset-0">

            <h2>@ViewBag.Title</h2>

            <h3>@ViewBag.Message</h3>
        </div>
</div>

【问题讨论】:

  • 显示自定义过滤器属性的签名以及如何将其应用于方法

标签: asp.net-mvc asp.net-mvc-5


【解决方案1】:

ViewResult 上有一个ViewBag 属性,您可以在其中设置要传递给视图的 viewBag 项。您可以将动态对象设置为值。

filterContext.Result = new ViewResult
                          {
                             ViewName = "~/Views/Shared/Info.cshtml" ,
                             ViewBag= { Message="SS",Title="Hi title"}
                          };

【讨论】:

  • 这很奇怪。我已经这样做了,但成员没有出现。然后我不确定DynamicDictionary 是什么意思,所以我最终在ViewResult.ViewData 成员中传递了对Controller 的ViewDataDictionary 的引用,这也有效。我懒得发布答案。不过谢谢。这也可能奏效。有时间我应该再试一次。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-12
  • 1970-01-01
  • 1970-01-01
  • 2011-10-23
  • 2018-11-18
  • 2019-05-19
  • 2022-01-22
相关资源
最近更新 更多