【问题标题】:Using Razor without Visual Studio? System.Web.WebPages.Html.HtmlHelper vs. System.Web.Mvc.HtmlHelper在没有 Visual Studio 的情况下使用 Razor? System.Web.WebPages.Html.HtmlHelper 与 System.Web.Mvc.HtmlHelper
【发布时间】:2012-03-06 23:18:00
【问题描述】:

我正在尝试使用 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 作为标识符,如果我可以创建自己的变量来引用正确的对象/类型/类实例,那对我来说已经足够了。

【问题讨论】:

  • 您是否拥有 ASP.NET 网页站点所需的所有 Web.config 等内容?
  • 我试过了,似乎没有任何区别,至少对于这个特殊的例外没有影响。
  • 但它是 MVC 3 还是网页?
  • 我从一个 ASP.NET MVC 3 项目中添加了一个 Web.config 文件,来自这样一个项目的基本未经编辑的 Web.config 文件。

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


【解决方案1】:

显然,标识符 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 documentation。那里有很多教程。

【讨论】:

  • 这很好用。我确信将 Html“切换”到 MVC 类型也可以,但正如我所说,我想使用 razor 引擎,并且基本上“包含”其他文件,这就足够了。
【解决方案2】:

您似乎需要在 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> 

【讨论】:

  • 我把它放在哪里?感觉web.config是个初学者,我试着把它放在&lt;system.web&gt;旁边,但是这给了我一个错误,“请求的页面无法访问,因为该页面的相关配置数据无效。”
  • 我编辑了 web.config,通过删除很多不需要的东西来清理它(我在 SO 上发现了一个不同的问题),现在我收到了这个错误:“InvalidCastException: Unable to cast 'ASP._Page_index_cshtml' 类型的对象以键入 'System.Web.IHttpHandler'。”。我的 .cshtml 文件中的代码仍然只有@Html.GetType().FullName
  • 您是否尝试过为 ASP.NET MVC3 项目使用默认生成的 web.config?您添加的剃须刀的配置部分也需要注册。如果您无法获得一台自动取款机,我贴了一张here
猜你喜欢
  • 1970-01-01
  • 2020-03-30
  • 1970-01-01
  • 2018-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-28
相关资源
最近更新 更多