Asp.net mvc 2 MVC ControllerActionInvoker和调用操作

Asp.net mvc 2 MVC ControllerActionInvoker和调用操作,asp.net-mvc-2,controlleractioninvoker,Asp.net Mvc 2,Controlleractioninvoker,是否可以使用自定义操作调用程序而不必在控制器处理程序工厂中实例化它?例如,在自定义控制器工厂中: IController IControllerFactory.CreateController(RequestContext reqContext, string controllerName) { var controller = base.CreateCOntroller(reqContext,controllerName ) as Controller; controller.

是否可以使用自定义操作调用程序而不必在控制器处理程序工厂中实例化它?例如,在自定义控制器工厂中:

IController IControllerFactory.CreateController(RequestContext reqContext, string controllerName)
{
    var controller = base.CreateCOntroller(reqContext,controllerName ) as Controller;
    controller.ActionInvoker = new CustomActionInvoker();
}
或者有没有其他方法可以执行MVC操作而不必使用自定义操作调用程序

更新问题 我有一个控制器,比如说
家庭控制器
索引
动作<代码>索引是控制器中的主要操作。一旦执行了
索引
操作,MVC视图将使用Ajax-GET请求触发多个操作(我们使用jTemplates)

范例

// Controller actions

// main action and View
public ActionResult Index() { ... }

public ActionResult AjaxAction1(string id) { ... }
public ActionResult AjaxAction2() { ... }
public ActionResult AjaxAction3() { ... }
现在,我想根据特定场景过滤其中一些不执行的操作。例如,当
id
等于2时,我想停止执行
AjaxAction1

回到我原来的问题。有没有一种方法可以在不使用动作调用器的情况下实现这一点。我不想使用action invoker的原因是我的项目以循环引用结束


非常感谢任何想法。

找到了答案,您可以对控制器进行子类化,并在那里创建ControllerActionInvoker。

使用操作方法选择器 取决于
id
等于2时发生的情况,但这可以通过编写自定义操作方法选择器轻松完成

使用action method selector,您可以提供将根据参数值执行的操作:

[RequiresParameterValue("id", @"^2$")]
[ActionName("AjaxAction")]
public ActionResult AjaxAction1(string id) { ... }

[RequiresParameterValue("id", @"^[^2]*$")]
[ActionName("AjaxAction")]
public ActionResult AjaxAction2(string id) { ... }
从本例中可以看出,自定义操作方法选择器采用两个参数:

  • 控制器操作参数名称(示例中为id)
  • 检查控制器操作参数值的正则表达式
当路由值来自客户端时,Action方法选择器将所有路由值视为字符串,因此您可以使用正则表达式实现这一点。这也使得它非常灵活


第一个动作方法将在
id==“2”
时执行,第二个动作方法将在
id!=“2”

您希望在什么上下文中执行操作?执行控制器操作就像实例化一个控制器类型的新实例并调用action方法一样简单,但听起来您心里似乎有一个特定的上下文。你能更新你的问题来提供更多关于你想做什么的细节吗?嗨,我创建了一个新的教程,根据上下文使用扩展控制器动作调用程序。。这正是你想要的,但你可以很容易地适应你在这里解释的环境。这里是链接:看看。这是一个带有演示的教程。我希望这对你有帮助