Базовый класс макета MVC3 от View - PullRequest
1 голос
/ 27 января 2011

В MVC с веб-формами вы можете установить MasterType следующим образом:

<%@ MasterType TypeName="FooMasterPage" %>

, который дает вам ссылку на базовый класс главной страницы, который вы затем можете использоватьв представлении, подобном этому:

<% Master.title = "foo" %>

С помощью Razor мы можем указывать базовые классы для наших макетов, но, похоже, мы не можем получить к ним доступ из нашего представления.Это действительно невозможно?Единственный обходной путь, который я вижу, - это использование ViewBag / ViewData, который работает, но добавляет дополнительный уровень усилий и накладных расходов.

Можно ли ссылаться на экземпляр базового класса страницы макета из представления?

Ответы [ 2 ]

1 голос
/ 28 января 2011

Независимо от того, следует ли вам делать что-то подобное в MVC (и я согласен с точками Дарина), это просто невозможно в Razor, и это потому, что представления Razor визуализируются за один проход, начиная с представления в первую очередь.Какая страница макета будет использоваться, даже неизвестно, пока не будет завершено выполнение представления.

В отличие от этого, механизм просмотра aspx выполняет несколько проходов, когда сначала создается дерево страницы / главного элемента управления, затем подключается, затемпроисходят некоторые события (которые полезны в WebForms, но не в MVC), а затем происходит рендеринг.Именно эта концепция дерева элементов управления позволяет вам обращаться к главной странице со страницы просмотра.В Razor этого нет.

ViewBag / ViewData - рекомендуемые механизмы для передачи данных из представлений в макеты в Razor.

1 голос
/ 27 января 2011

Я не могу придумать ни одного сценария, почему кому-то, разрабатывающему приложение ASP.NET MVC, когда-либо понадобилось бы предоставлять общий базовый тип для главной страницы.Это будет означать, что вы пишете что-то наподобие кода и что-то вроде MVC.Тот факт, что вы можете сделать это в движке представления WebForms, объясняется тем, что это наследие классических WebForms, но это не значит, что это то, что нужно делать.Существует множество способов включить в ASP.NET MVC общую функциональность, начиная от ViewModels, использования пользовательских помощников HTML, использования частичных операций, использования Html.Action , использования разделов бритвы и т. Д.1003 *

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