更改OnActionExecuting事件模型(Change the model in OnActi

2019-06-24 03:22发布

我使用MVC 3操作过滤器。

我的问题是,如果之前它传递给OnActionExecuting事件的ActionResult我各具特色的模式?

我需要改变的属性值的一个人也没有。

谢谢,

Answer 1:

有一个在没有模型还OnActionExecuting事件。 该模型由控制器操作返回。 所以,你有内部模型OnActionExecuted事件。 这就是你可以改变的值。 例如,如果我们假设你的控制器操作返回的ViewResult,并通过在这里的一些模式是你如何可以检索这个模型和修改一些属性:

public class MyActionFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        var result = filterContext.Result as ViewResultBase;
        if (result == null)
        {
            // The controller action didn't return a view result 
            // => no need to continue any further
            return;
        }

        var model = result.Model as MyViewModel;
        if (model == null)
        {
            // there's no model or the model was not of the expected type 
            // => no need to continue any further
            return;
        }

        // modify some property value
        model.Foo = "bar";
    }
}

如果你想修改的AS动作参数传递的视图模型的某些属性的值,那么我会建议在自定义模型粘合剂这样做。 但它也有可能实现的是,在OnActionExecuting事件:

public class MyActionFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var model = filterContext.ActionParameters["model"] as MyViewModel;
        if (model == null)
        {
            // The action didn't have an argument called "model" or this argument
            // wasn't of the expected type => no need to continue any further
            return;
        }

        // modify some property value
        model.Foo = "bar";
    }
}


文章来源: Change the model in OnActionExecuting event