Как динамически составить список существующих контроллеров действий с главной страницы? - PullRequest
2 голосов
/ 13 сентября 2010

Я хочу перечислить все существующие контроллеры из главной страницы.

Например:

В моей папке Controller у меня есть:

  1. HomeController с индексом действий и т.д ...
  2. ProductController с действиями Index, Details и т. Д ...
  3. ServiceController с действиями Index, Edit и т.д ...
  4. SomethingController с действиями Index, Update и т.д ...
  5. и т.д.

Из моего Site.master я хочу динамически перечислить все эти контроллеры действий.

Ответы [ 2 ]

2 голосов
/ 13 сентября 2010

Хотя я полностью согласен с ответом @ Darin , здесь есть относительно простой способ сделать то, что вы просите, используя ViewData.

Относительно реальной логики перечисления всех контроллеров.Я не буду добавлять это здесь, так как это - разумный способ сделать это, что я, вероятно, не смогу улучшить.

Вы могли бы сделать что-то, используя ViewData для хранения всех ваших контроллерови действия динамически от OnActionExecuting.Вам нужно создать новый контроллер, от которого будут наследоваться все ваши другие контроллеры.

Так, например, с вашим ProductController:

public class ProductController : MyCustomController
{
  ...
}

...

public class MyCustomController : Controller
{
  protected override void OnActionExecuting(ActionExecutingContext filterContext)
  {
    base.OnActionExecuting(filterContext);

    //Some logic (not written) to reflect each of the controllers and actions. Probably something utilising IGrouping.
    var controllersActions = GetControllersActions();

    //Drop your collection into the ControllersActions.
    filterContext.Controller.ViewData.Add("ControllersActions", controllersActions);
  }
}

На главной странице ...

<% var controllersActions = ViewData["ControllersActions"]; %>

... outputting your controllers/actions ...
1 голос
/ 13 сентября 2010

Из моего Site.master я хочу динамически перечислить все эти контроллеры действий.

Представления не должны извлекать данные.Они должны показывать данные / модель, переданные контроллером.Таким образом, внутри вашего контроллера вы можете использовать отражение, чтобы перечислить все типы, производные от контроллера, и передать их в представление для рендеринга.Другая возможность - иметь помощника HTML, который сделает эту работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...