В asp.net mvc действительно ли это возможно сделать универсальный контроллер?

попробуйте этот шаблон:

"^\s?([_a-z0-9-]+(.[a-z0-9-]+)@customercurrency.com)+([;.]([_a-z0-9-]+(.[a-z0-9-]+)@customercurrency.com))*$"

(ошибка в имени домена и скобки отсутствуют)

27
задан Aaron Palmer 11 May 2009 в 16:26
поделиться

4 ответа

Если я вас правильно понимаю, то, что вы пытаетесь сделать, - это направить все запросы для данной Модели через общий контроллер типа T.

Вы бы хотели, чтобы T изменялся в зависимости от на запрошенной модели.

Вы хотите, чтобы / Product / Index запускал MyController .Index ()

. Это можно сделать, написав свой собственный IControllerFactory и реализовать метод CreateController следующим образом:

public IController CreateController(RequestContext requestContext, string controllerName)
{
    Type controllerType = Type.GetType("MyController")
                              .MakeGenericType(Type.GetType(controllerName));
    return Activator.CreateInstance(controllerType) as IController;
}
37
ответ дан 28 November 2019 в 05:12
поделиться

Да, вы можете, все в порядке, и я сам много использовал их.

Вам нужно убедиться, что когда вы наследуете от MyController, вы по-прежнему заканчиваете имя типа контроллером:

public class FooController :  MyController<Foo>
{ 
 ...
}
9
ответ дан 28 November 2019 в 05:12
поделиться

Фабрика контроллеров по умолчанию использует "соглашение" вокруг имен контроллеров, когда пытается найти контроллер для отправки запроса. При желании вы можете переопределить эту функцию поиска, что позволит вашему универсальному контроллеру работать.

Эта статья MSDN ...

http://msdn.microsoft.com/en-us/magazine/dd695917.aspx

... содержит хорошее описание того, что происходит.

1
ответ дан 28 November 2019 в 05:12
поделиться

На вашем месте я бы получил исходный код MVC и создал бы тестовый проект MVC с исходным кодом, чтобы вы могли проверить, где генерируется исключение, и посмотреть, что вы можете справиться со своей общей идеей и принудительным соглашением об именах «* контроллер».

0
ответ дан 28 November 2019 в 05:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: