Использование Razor без Visual Studio?System.Web.WebPages.Html.HtmlHelper против System.Web.Mvc.HtmlHelper - PullRequest
3 голосов
/ 15 февраля 2012

Я пытаюсь создать веб-сайт, используя некоторые функции Razor, но без использования Visual Studio. Основная причина этого заключается в том, что в настоящее время я в основном работаю с Mac, и я хотел бы использовать Coda для редактирования страниц.

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

Итак, я попробовал следующее:

  1. Я создал новый сайт под IIS7
  2. Я зашёл в файл .cshtml с таким кодом: @DateTime.Now
  3. Я открыл его через Chrome

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

Тогда я попробовал следующий код:

@Html.RenderPartial("menu.cshtml")

и я получаю это сообщение об ошибке:

c: \ inetpub \ drip \ dev2 \ index.cshtml (1,12): ошибка CS1061: «System.Web.WebPages.Html.HtmlHelper» не содержит определения для «RenderPartial» и не имеет метода расширения «RenderPartial» 'можно принять первый аргумент типа' System.Web.WebPages.Html.HtmlHelper '(вы пропустили директиву using или ссылку на сборку?)

Очевидно, идентификатор Html относится к другому классу, чем я ожидал.

Итак, есть ли учебник о том, как это сделать? Это вообще возможно?

Этот код:

@Html.GetType().FullName

Выводит это:

System.Web.WebPages.Html.HtmlHelper

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

Ответы [ 2 ]

4 голосов
/ 15 февраля 2012

Ясно, что идентификатор Html относится к другому классу, чем я ожидал.

Да, это относится к System.Web.WebPages.Html.HtmlHelper , который используется веб-страницами. В ASP.NET MVC это System.Web.Mvc.HtmlHelper класс.

Базовым классом вашего шаблона является класс WebPage , тогда как в ASP.NET MVC это класс WebViewPage .

Но поскольку вы используете веб-страницы, вы можете полагаться только на определенные им методы. Например, если вы хотите включить частичное, вы можете сделать следующее:

~/_SiteLayout.cshtml:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>test</title>
    </head>
    <body>
        @RenderBody()
    </body>
</html>

~/Default.cshtml

@{  
    Layout = "~/_SiteLayout.cshtml";
    Page.Title = "Welcome to my Web Site!";
}
<div>Welcome</div>

@RenderPage("Menu.cshtml")

~/Menu.cshtml

@{  
    Layout = null;
}
<div>Some menu</div>

web.config

<configuration>
    <system.web>
        <compilation debug="true" targetFramework="4.0" />
    </system.web>
</configuration>

Вы можете взглянуть на документацию WebPages . Там много учебников.

0 голосов
/ 15 февраля 2012

Похоже, вам нужно сослаться на System.Web.Mvc.Html в вашем файле web.config, чтобы иметь возможность использовать методы расширения из класса RenderPartialExtensions

<system.web.webPages.razor>
   <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
   <pages pageBaseType="System.Web.Mvc.WebViewPage">
     <namespaces>
       <add namespace="System.Web.Mvc" />
       <add namespace="System.Web.Mvc.Ajax" />
       <add namespace="System.Web.Mvc.Html" />
       <add namespace="System.Web.Routing" />
     </namespaces>
   </pages>
</system.web.webPages.razor> 
...