ASP.NET MVC5
▌Introduction
1. Public properties in ActionFilter
2. Use ViewBag/ViewData/TempData
▌Environment
▋Visual Studio 2017 community
15.3.3
▋ASP.NET MVC5
▌Implement
▋ActionFilter with public properties
▋Implement ActionFilterAttribute
Override OnActionExecuted for example.
public class LogActionFilter : ActionFilterAttribute
{
public string PageTitleZh { get; set; }
public string PageTitleCn { get; set; }
public string PageTitleEn { get; set; }
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
//Log(PageTitleZh, PageTitleCn,
PageTitleEn)
}
}
|
▋Usage in MVC Controller
[HttpPost]
[LogActionFilter(PageTitleZh = "XXXX", PageTitleCn ="YYYY", PageTitleEn = "ZZZZ")]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Create(VmModel viewModel)
{
}
|
However, if we want to pass parameters with dynamic values,
we have to use the next approach.
▋Get parameter thru ViewData/ViewBag/TempData in
ActionFilter
We will use ViewData for example.
▋MVC Controller
[HttpPost]
[LogActionFilter]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Create(VmModel
viewModel)
{
ViewData["PageTitleZh"] = "MVC進階課程";
ViewData["PageTitleCn"] = "MVC进阶课程";
ViewData["PageTitleEn"] = "MVC advanced class";
}
|
▋Implement ActionFilterAttribute
public class LogActionFilter : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
var httpContext =
filterContext.RequestContext.HttpContext;
var viewData =
filterContext.Controller.ViewData;
Log(new TraceLog
{
PageTitleZh = (string)viewData["PageTitleZh"] ?? "",
PageTitleCn = (string)viewData["PageTitleCn"] ?? "",
PageTitleEn = (string)viewData["PageTitleEn"] ?? "",
PageUri = httpContext.Request.Path,
UserId = httpContext.User.Identity.Name,
UserIp = httpContext.Request.UserHostAddress
});
}
}
|
▌Reference
沒有留言:
張貼留言