MVC ControllerActionInvoker и вызывающие действия - PullRequest
2 голосов
/ 08 августа 2010

Можно ли использовать средство вызова настраиваемого действия без необходимости его создания на фабрике обработчиков контроллеров? Например, на фабрике пользовательских контроллеров:

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

Или есть другой способ выполнить действие MVC без необходимости использовать пользовательское действие?

Обновление вопроса

У меня есть контроллер, скажем HomeController и Index action. 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() { ... }

Теперь я хочу отфильтровать некоторые из этих действий, чтобы они не выполнялись в зависимости от определенных сценариев. Например, я хочу прекратить выполнение AjaxAction1, когда id равно 2.

Вернуться к моему первоначальному вопросу. Есть ли способ добиться этого без использования действия invoker. Причина, по которой я не хочу использовать action invoker, заключается в том, что структурированный проект заканчивался циклическими ссылками.

Любые идеи с благодарностью.

Ответы [ 2 ]

1 голос
/ 08 августа 2010

Найдя ответ, вы можете создать подкласс Controller и создать там ControllerActionInvoker.

0 голосов
/ 28 февраля 2011

Использование селектора метода действия

В зависимости от того, что происходит, когда id равно 2, но это довольно легко сделать, написав собственный селектор метода действия.

Используя селектор метода действия, выможет предоставить ваши действия, которые будут выполняться в зависимости от значений параметров:

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

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

Как видно из этого примера, селектор метода настраиваемого действия принимает два параметра:

  • параметр действия контроллераname (id в примере)
  • регулярное выражение, которое проверяет значение параметра действия контроллера

Селектор метода действия видит все значения маршрута как строки, когда они поступают от клиента, поэтому выможет на самом деле осуществить это с помощью регулярных выражений.И это также делает его очень очень гибким.

Первый метод действия будет выполнен, когда id == "2", и второй, когда id != "2".

.
...