2

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

IController IControllerFactory.CreateController(RequestContext reqContext, string controllerName)
{
    var controller = base.CreateCOntroller(reqContext,controllerName ) as Controller;
    controller.ActionInvoker = new CustomActionInvoker();
}

还是有另一种方法可以执行 MVC 操作而无需使用自定义操作调用程序?

更新问题

我有一个控制器,说HomeControllerIndex行动。Index是控制器中的主要动作。一旦Index动作被执行,MVC 视图将使用 Ajax - GET 请求(我们使用jTemplates)触发多个动作。

例子

// Controller actions

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

public ActionResult AjaxAction1(string id) { ... }
public ActionResult AjaxAction2() { ... }
public ActionResult AjaxAction3() { ... }

现在我想根据某些场景过滤其中一些不执行的操作。例如,我想在等于 2AjaxAction1时停止执行。id

回到我原来的问题。有没有办法在不使用动作调用程序的情况下实现这一点。我不想使用动作调用程序的原因是我的项目结构最终以循环引用结束。

任何想法都非常感谢。

4

2 回答 2

1

找到答案,您可以将 Controller 子类化并在那里创建 ControllerActionInvoker。

于 2010-08-08T12:05:49.613 回答
0

使用动作方法选择器

取决于id等于 2 时发生的情况,但这可以很容易地通过编写自定义操作方法选择器来完成。

使用操作方法选择器,您可以提供将根据您的参数值执行的操作:

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

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

从这个示例中可以看出,自定义操作方法选择器采用两个参数:

  • 控制器动作参数名称(id在示例中)
  • 检查控制器动作参数值的正则表达式

动作方法选择器将所有来自客户端的路由值视为字符串,因此您实际上可以通过使用正则表达式来实现这一点。它也使它非常灵活。

第一个动作方法将在什么时候执行id == "2",第二个动作方法在什么时候执行id != "2"

于 2011-02-28T13:41:02.757 回答