Различные представления для одних и тех же действий в ASP.NET MVC 2 - мне наследовать контроллер? - PullRequest
3 голосов
/ 16 марта 2011

Добрый день!

У меня есть приложение, в котором мне нужно отобразить и обработать форму с двумя разными HTML-кодами - одну для обычной страницы с главной страницей всего сайта и одну для включения iframe с другим дизайном.дизайн (HTML code) и другие главные страницы.

Сейчас у меня есть контроллер с парой действий и представлений для обычной страницы, пришло время создать версию iframe.Поля формы, проверка и обработка идентичны, поэтому я хотел бы сделать его СУХИМЫМ.

Можно ли унаследовать контроллер (не добавляя ничего нового в него), чтобы иметь возможность создавать новые представления?

namespace MyControllers
{
    public class SomeController : BaseController
    {
        [HttpGet]
        public ActionResult ProcessMyForm()
        {
            ...
        }

        [HttpPost]
        public ActionResult ProcessMyForm(FormCollection form)
        {
            ...
        }       
    }
}

Представления будут в /Views/MyController

и

namespace MyControllers
{
    public class SomeControllerWithDifferentViews : SomeController
    {
        // nothing here
    }
}

Различные представления будут в /Views/SomeControllerWithDifferentViews

Имеет ли смысл

Ответы [ 3 ]

5 голосов
/ 16 марта 2011

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

[HttpPost]
public ActionResult ProcessMyForm(FormCollection form, bool isIFrame)
{
  ...snip...

  if (isIFrame)
  {
    return View ('MyFormIFrame')
  }
  else
  {
    return View ('MyForm');
  }
}

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

routes.MapRoute ("MyForm", "/mycontroller/action", new
{
  Controller = "mycontroller",
  Action = "ProcessMyForm",
  isIFrame = false,
});


routes.MapRoute ("MyFormIFrame", "/mycontroller/action-iframe", new
{
  Controller = "mycontroller",
  Action = "ProcessMyForm",
  isIFrame = true,
});
1 голос
/ 17 марта 2011

Возможно ли наследовать контроллер (не добавляя ничего нового к нему) чтобы иметь возможность создавать новые виды?

Да, это так.

Однако имейте в виду, что в ASP.NET MVC представления и контроллеры не связаны друг с другом. Вы можете иметь два совершенно разных контроллера, обслуживающих одно и то же представление (при условии, что вы передаете правильный ViewModel в представление). Это означает, что вам не обязательно наследовать от одного и того же контроллера, чтобы использовать представление от более чем одного контроллера. Вы можете, если это имеет смысл, но вам это не нужно.

0 голосов
/ 16 марта 2011

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

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