Здравствуйте, я хотел бы создать свой собственный ActionFilterAttribute для каждого контроллера в моем приложении, этот атрибут должен установить некоторые значения ViewBag. Является ли ActionFilterAttribute подходящим для него и как получить доступ к viewbag в ActionFilterAttribute?
Как установить значения в ViewBag в ActionFilterAttribute ASP MVC 5?
Ответ 1
Вы можете сделать это следующим образом:
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();
}
Ответ 2
попробуйте это
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";
}
}
Ответ 3
Для передачи данных из другого действия контроллера
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);
}