riki
riki

Reputation: 2403

How can I inject an Action to controller from custom action filter

I have a custom action filter (say CustomActionFilter) where I override OnActionExecuting to validate the Action's input parameter such that if the input param is null then the filter will render a view (say view MyErrorView) contains "Index not found" text else it will let execute the regular Action method.

My Action Method:

    [CustomActionFilter]
    public ActionResult Index(int indexId)
    {
        return View();
    }

My Filter's overridden method:

    void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.HttpContext.Trace.Write("(Custom Action Filter)Action Executing: " + filterContext.ActionDescriptor.ActionName);

        if (filterContext.ActionParameters["indexId"] == null)
        {
            //my code goes here
        }
    } 

What code I need to put in the of condition to do so.

Upvotes: 0

Views: 58

Answers (1)

Ala
Ala

Reputation: 1503

void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.HttpContext.Trace.Write("(Custom Action Filter)Action Executing: " + filterContext.ActionDescriptor.ActionName);

        if (filterContext.ActionParameters["indexId"] == null)
        {
        filterContext.Result = new ViewResult
        {
            ViewName = "MyErrorView",
            ViewData = filterContext.Controller.ViewData,
            TempData = filterContext.Controller.TempData
        }
        }
        base.OnActionExecuting(filterContext);

    } 

Upvotes: 1

Related Questions