拦截MVC控制器的动作方法

时间:2009-04-03 08:08:03

标签: asp.net-mvc modelbinders

我使用O / R映射器,可以通用方式从DB重新加载对象。我希望能够在创建映射对象后立即拦截请求,以便重新加载它们。

ActionFilters当然是存在的,但问题是ActionFilters(或我见过的例子)可以处理表单提供的数据,而不是在创建对象之后。

我看了控制器的可覆盖的方法,但没有发现任何明显的东西引起了我的注意。有没有人知道这样做的方法?

感谢您的建议!

纳赛尔

2 个答案:

答案 0 :(得分:0)

如果我理解你需要这样的东西。

public class Navigate : ActionFilterAttribute, IActionFilter
{
    void IActionFilter.OnActionExecuted(ActionExecutedContext filterContext)
    {
        ViewResult view = filterContext.Result as ViewResult;

    }
}

在视图中,您将找到属于当前Controller的view.ViewData.Model,您可以使用此映射数据执行所需的所有操作。 如果我是对的,请告诉我:)。

答案 1 :(得分:0)

您需要的是自定义模型装订器。您可以从默认的ModelBinder类继承并提供所需的逻辑。

例如,如果你有这个:

public ActionResult Save([Bind(typeof(CustomModelBinder))] Customer customer)
{
   /* ... */
}

模型绑定器将为您创建对象,但您可以选择首先从数据库中获取它(对于现有记录)。