I recently had a need to create a custom Action Filter in ASP.NET MVC to perform some pre-processing before I executed my Controller Action Methods.
I followed these MSDN articles to get started creating my Custom Action Filter:
https://msdn.microsoft.com/en-us/library/dd381609%28v=vs.100%29.aspx
https://msdn.microsoft.com/en-us/library/dd410056%28v=vs.100%29.aspx
However, there was not a great deal of insight on how to pass values and use values in my ActionFilter as well as how to create a custom ViewResult (such as by adding errors to the ModelState Errors collection).
Therefore, I played around with some code until I was finally able to get this code sample working:
I followed these MSDN articles to get started creating my Custom Action Filter:
https://msdn.microsoft.com/en-us/library/dd381609%28v=vs.100%29.aspx
https://msdn.microsoft.com/en-us/library/dd410056%28v=vs.100%29.aspx
However, there was not a great deal of insight on how to pass values and use values in my ActionFilter as well as how to create a custom ViewResult (such as by adding errors to the ModelState Errors collection).
Therefore, I played around with some code until I was finally able to get this code sample working:
namespace MvcFilters
{
public class CustomFilterAttribute : ActionFilterAttribute
{
public string ModuleName { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
bool myValue = true;
if (myValue)
{
base.OnActionExecuting(filterContext);
}//if
else
{
filterContext.Result = new CustomResult(this.ModuleName);
}
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
}
}
}
namespace MvcFilters
{
public class CustomResult : ViewResult
{
public CustomResult(string moduleName)
{
string strErrorMessage = string.Format("{0} cannot be used", moduleName);
this.ViewData.ModelState.AddModelError("", strErrorMessage);
}
public override void ExecuteResult(ControllerContext context)
{
base.ExecuteResult(context);
}
}
}
Then, in order to use my ActionFilterAttribute in my ASP.NET MVC Controller, I simply decorate my ActionMethod in the following manner:
[HttpGet]
[CustomFilter(ModuleName ="Module1")]
public ActionResult Module1()
{
return View();
}
That was all that was needed to get my Custom ASP.NET MVC ActionFilter to work and return my ModelState Error messages!!
Hey, Nice information about ASP.NET MVC. Thanks to share. I have a little bit knowledge about asp.net mvc from Myasp.net. It is a good hosting site ,where I hosted my website.
ReplyDelete