Возможно ли использование Razor на странице ASPX .Master? - PullRequest
38 голосов
/ 13 августа 2010

Можно ли сохранить существующую страницу .master и использовать ее с новым представлением ASP.NET MVC 3 Razor? Я попробовал это:

@{
   LayoutPage = "~/Views/Shared/Site.master";
 }

И это дает мне это сообщение об ошибке:

Файл '~ / Views / Shared / Site.master' не может быть отображен, поскольку он не существует или не является допустимой страницей.

Ответы [ 6 ]

34 голосов
/ 14 августа 2010

К сожалению нет.Главные страницы являются частью механизма просмотра ASPX WebForms, а не инфраструктуры MVC, поэтому Razor не может с ним взаимодействовать.

Одним из вариантов будет дублирование мастеров, как вы упомянули, но вместо копирования всего кодаВы можете разделить главную страницу на несколько частей ASPX, которые могут встраивать мастера Razor и ASPX.Затем вы можете начать преобразование каждой страницы и частичной, один за другим, в Razor и в конечном итоге избавиться от мастера ASPX.

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

На самом деле есть способ сделать это. Скотт Хэнслман имеет пост в блоге на тему: http://www.hanselman.com/blog/MixingRazorViewsAndWebFormsMasterPagesWithASPNETMVC3.aspx

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

8 голосов
/ 13 августа 2010

Я думаю, вам нужно искать _Layout.cshtml в общей папке ...

Вот сравнение между aspx и механизмом просмотра бритвы ....

http://weblogs.asp.net/shijuvarghese/archive/2010/07/29/aspx-and-razor-view-engines-in-asp-net-mvc-3-preview-1.aspx

это также интересный пост о вложенных мастер-страницах с бритвой ...

http://weblogs.asp.net/fredriknormen/archive/2010/08/01/asp-net-mvc-3-0-preview-1-razor-and-nested-master-pages.aspx

HTH

2 голосов
/ 28 ноября 2012

Поддержка пользовательских элементов управления .NET в MVC

MVC официально не поддерживает пользовательские элементы управления .Net, но вы можете получить созданный ими html. Следующий код извлекает HTML-код, созданный на странице, состоящей из десятков файлов ASCX.

  • Создайте страницу ASP, содержащую ваши пользовательские элементы управления .Net на вашем сайте MVC.
  • Получите строку HTML, созданную вашими пользовательскими элементами управления.
  • Используйте строку HTML на странице макета MVC.

Пример кода:

try{

    using (WebClient client = new WebClient())  
    {

        client.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13";

        myHTML = client.DownloadString("http//www.mysite.com/header.aspx");
    }

} catch ( WebException exception )

{

    using(var reader = new StreamReader(exception.Response.GetResponseStream())){

        Response.Write(reader.ReadToEnd());

    }

}

@Html.Raw(myHTML ); //OR Response.Write(myHTML);

@RenderBody(); 
1 голос
/ 18 октября 2013

Только что сам прошел через этот процесс, я обнаружил, что этот метод Мэтта Хоули сработал.

Этот подход работает путем создания стандартной страницы aspx, которая использует необходимую главную страницу. Затем вы можете добавить заполнители контента по мере необходимости. Затем вы вызываете RenderPartial с именем используемого представления. Ответ от вашего контроллера затем передается фактическому представлению, которое вы хотите визуализировать.

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

0 голосов
/ 13 августа 2011

В Razor вы можете достичь той же функциональности, используя страницы макета.

Макет / Мастер-страницы с использованием Razor

...