Могу ли я упростить этот код для обратных просмотров? Это кажется очень излишним - PullRequest
6 голосов
/ 04 января 2012

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

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

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

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

РЕДАКТИРОВАТЬ: Спасибо за все ответы:)

Ответы [ 3 ]

9 голосов
/ 04 января 2012

Вы можете создать метод совместного действия, который принимает параметр viewName:

public ActionResult Show(string viewName)
{
    return View(viewName);
}

Затем вы можете направить эти имена к этому действию:

routes.MapRoute(
    "Simple Content",
    "/{viewName}",
    new { controller = "Something", action = "Show" },
    new { viewName = "Research|Facility|Contact" }
);

Требуется ограничение viewName, чтобы этот маршрут не совпадал с произвольными URL-адресами.

Остерегайтесь, что это уязвимость раскрытия информации; злоумышленник может запросить /ControllerName/Show?viewName=~/Views/Secret/View.
Если у вас есть конфиденциальные представления, в которых не используются модели, вы должны проверить viewName в действии.
Для этого вы можете использовать перечисление, как в ответе dknaack .

2 голосов
/ 04 января 2012

Вы могли бы создать новый маршрут, который бы занимал только controllername/{path}, и путь будет вашим именем представления, тогда в действии контроллера что-то вроде этого

public ActionResult Page(string path)
{
    return View(path);
}

Итак, перейдя по этому пути

yourdomain.com/controllername/Ijusttest загрузит вид из ~/Views/controllername/Ijusttest.cshtml.Вы просто должны быть уверены, что будете называть действия с маршрута.

Надеюсь, это имеет смысл.Вы можете настроить его по-другому, все зависит от маршрутизации, которую вы создаете.Дайте мне знать, если вам нужна помощь с кодом маршрута.

0 голосов
/ 04 января 2012

Возможно, вы захотите создать одно действие и передать аргумент в качестве имени страницы, например

public StaticContent : Controller
{
  public ActionResult Pages(string id)
  {
    return View(id);
  }
}

Где id может иметь значения «Исследование», «Объект» и т. Д.

Вы получите URL-адрес, подобный этому / staticcontent / pages / research

Например, просто назовите виды в папке StaticContent Research.cshtml.

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