从基于ActionFilterAttribute的ViewBag中提取数据

时间:2015-03-18 03:32:06

标签: asp.net-mvc-4 viewbag

public class GeneralFilter : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        dynamic val = filterContext.Controller.ViewBag;
        string action = filterContext.ActionDescriptor.ActionName;
        string controller = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
    }
}

在上面的代码中,我通过viewbag从控制器操作传递数据。我能够在上面提到的变量val中看到这些数据。如何从上面代码中的变量动态val 中提取数据?!

当我使用断点浏览时,这是流程

  • val {System.Web.Mvc.DynamicViewDataDictionary}
    • ViewData {System.Web.Mvc.ViewDataDictionary}
    • _innerDictionary Count = 1
      • [0] =>我需要的数据在这里< = 或
    • 值Count = 1
      • [0] =>我需要的数据在这里< =

1 个答案:

答案 0 :(得分:0)

从我的控制器,如果我传递这样的数据

var Numbers = new List<int> { 1, 2, 3 };

ViewBag.numbers = Numbers;

然后我可以像这样

从CustomfilterAttribute获取数据

foreach (var number in filterContext.Controller.ViewBag.numbers)

{ var i = number; }

注意:为此,您需要为传递ViewBag.numbers数据的方法分配[GeneralFilter],否则您必须面对null引用错误! 我赞赏其他更好的答案!?