MVC3 Вернуться Просмотр по умолчанию - PullRequest
0 голосов
/ 11 октября 2011

По сути, мне было интересно, знает ли кто-нибудь, как вы можете настроить MVC3 таким образом, чтобы он сначала искал действие, и, если такового не существует, он автоматически вернет представление в этом месте. В противном случае каждый раз, когда я создаю страницу, мне нужно будет перестраивать ее после добавления действия.

Это не то, что мешает проекту работать, и это не проблема, просто было бы очень приятно включить его в код, чтобы повысить скорость тестирования больше всего.

EDIT:

Просто для ясности, это то, что я делаю каждый раз, когда создаю представление, в котором нет логики:

public ActionResult ActionX()
{
    return View();
}

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

Мне бы хотелось, чтобы был какой-либо способ всегда возвращать вышеуказанный код для каждой комбинации «Контроллер / Действие», ЕСЛИ Я уже не выполнил действие, тогда он должен использовать указанное Действие.

Спасибо

Джейк

Ответы [ 2 ]

2 голосов
/ 11 октября 2011

Почему бы просто не создать одно действие для этого.Это будет искать представление с указанным именем и возвращать 404, если оно не существует.

    [HttpGet]
    public ActionResult Page(string page)
    {
        ViewEngineResult result = ViewEngines.Engines.FindView(ControllerContext, page, null);

        if (result == null)
        {
            return HttpNotFound();
        }

        return View(page);
    }

Затем сделать маршрут по умолчанию обратно к этому:запрос к http://yoursite.com/somepage вызовет Page ("somepage")

1 голос
/ 11 октября 2011

Я не совсем уверен, насколько это будет полезно (или действительно ли это хорошая идея), но я предполагаю, что если у вас есть страницы, которые имеют чисто статический контент (но, возможно, вы используете макет или что-то еще, чтобы вы не могли использовать статическийhtml) это может быть полезно

Вот как это можно сделать в любом случае (как базовый класс, но это не обязательно)

public abstract class BaseController : Controller
{
    public ActionResult Default()
    {
        return View();
    }

    protected override IActionInvoker CreateActionInvoker()
    {
        return new DefaultActionInvoker();
    }

    private class DefaultActionInvoker : ControllerActionInvoker
    {
        protected override ActionDescriptor FindAction(ControllerContext controllerContext, ControllerDescriptor controllerDescriptor, string actionName)
        {
            var actionDescriptor = base.FindAction(controllerContext, controllerDescriptor, actionName);

            if (actionDescriptor == null)
                actionDescriptor = base.FindAction(controllerContext, controllerDescriptor, "Default");

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