在没有Visual Studio的情况下使用Razor? System.Web.WebPages.Html.HtmlHelper与System.Web.Mvc.HtmlHelper

时间:2012-02-15 15:40:23

标签: asp.net asp.net-mvc-3 razor html-helper

我正在尝试使用一些Razor功能创建一个网站,但不使用Visual Studio。主要原因是我目前主要使用的是Mac,我想使用Coda来编辑页面。

从数据库访问的角度来看,我不需要可编程的网站,但是我想使用RenderPartial,这样我就可以分割页面并实现一些常用的功能,比如菜单等等。上。

所以,我尝试了以下内容:

  1. 我在IIS7下创建了一个新网站
  2. 我使用以下代码放入.cshtml文件:@DateTime.Now
  3. 我通过Chrome打开它
  4. 这显示了当前的日期和时间,因此剃刀引擎显然就会执行。

    然后我尝试了以下代码:

    @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 个答案:

答案 0 :(得分:4)

  

显然,标识符Html指的是与我预期不同的类。

是的,它指的是WebPages使用的System.Web.WebPages.Html.HtmlHelper。在ASP.NET MVC中,它是System.Web.Mvc.HtmlHelper类。

模板的基类是WebPage类,而在ASP.NET MVC中,它是WebViewPage类。

但是,由于您使用的是WebPages,因此您只能依赖它定义的方法。例如,如果您想要包含部分内容,则可以执行以下操作:

~/_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 documentation。那里有很多教程。

答案 1 :(得分:0)

您似乎需要在web.config中引用System.Web.Mvc.Html才能使用RenderPartialExtensions class中的扩展方法

<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>