Asp.net mvc 如何在ActionFilterAttribute ASP MVC 5中设置ViewBag的值?
您好,我想为应用程序中的每个控制器创建自定义ActionFilterAttribute,该属性应该设置一些ViewBag值。是否可以使用ActionFilterAttribute以及如何在ActionFilterAttribute中访问viewbag?您可以这样做Asp.net mvc 如何在ActionFilterAttribute ASP MVC 5中设置ViewBag的值?,asp.net-mvc,asp.net-mvc-5,Asp.net Mvc,Asp.net Mvc 5,您好,我想为应用程序中的每个控制器创建自定义ActionFilterAttribute,该属性应该设置一些ViewBag值。是否可以使用ActionFilterAttribute以及如何在ActionFilterAttribute中访问viewbag?您可以这样做 public class SomeMsgAttribute : FilterAttribute, IResultFilter { public void OnResultExecuted(ResultExecutedC
public class SomeMsgAttribute : FilterAttribute, IResultFilter
{
public void OnResultExecuted(ResultExecutedContext filterContext)
{
}
public void OnResultExecuting(ResultExecutingContext filterContext)
{
filterContext.Controller.ViewBag.Msg= "Hello";
}
}
使用:
[SomeMsg]
public ActionResult Index()
{
return View();
}
试试这个
public class CustomFilterAttribute : ActionFilterAttribute
{
public override void
OnActionExecuting(ActionExecutingContext filterContext)
{
// get the view bag
var viewBag = filterContext.Controller.ViewBag;
// set the viewbag values
viewBag.CustomValue = "CustomValue";
}
}
从其他控制器操作传输数据的步骤
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
EmployeeTrackingSystemAndMISEntities db = new EmployeeTrackingSystemAndMISEntities();
var UserCookie = filterContext.HttpContext.Request.Cookies["UserUniqueID"];
RouteValueDictionary redirectTargetDictionary = new RouteValueDictionary();
redirectTargetDictionary.Add("action", "UserLogIn");
redirectTargetDictionary.Add("controller", "Login");
var TempData = filterContext.Controller.TempData;
TempData["Status"] = "Please log in as Admin";
filterContext.Result = new RedirectToRouteResult(redirectTargetDictionary);
}
对于ASP.NET Core,您可以执行以下操作
public class SomeFilterAttribute : IActionFilter
{
public void OnActionExecuting(ActionExecutingContext context)
{
Controller controller = context.Controller as Controller;
controller.ViewBag.CustomValue = customVal;
controller.ViewData["CustomValue "] = customVal;
controller.TempData["CustomValue "] = customVal;
}
}
然后从控制器
[TypeFilter(typeof(ValidateAppFeatureEnabled))]
public IActionResult Index()
{
var foo = ViewBag.CustomValue;
var bar = (type)ViewData["CustomValue"];
var buzz = (type)TempData["CustomValue"];
// Whatever else you need to do
return View();
}
您是否有任何解释,说明为什么它在执行中起作用,而在执行中不起作用?@TolgaEvcimen
OnResultExecuted
在呈现razor视图后被调用。到那时,更改输出已经太晚了。我明白了,我一直认为它是在action方法返回后立即调用的OnResultExecuted
,可惜:)我应该认为:)谢谢。