2012-02-15 163 views
3

我想创建一个网站使用一些Razor功能,但不使用Visual Studio。主要原因是我目前主要从Mac工作,我想使用Coda编辑页面。在没有Visual Studio的情况下使用Razor? System.Web.WebPages.Html.HtmlHelper与System.Web.Mvc.HtmlHelper

我不需要一个可编程的网站,在数据库访问的意义上,这样的事情,但我想使用RenderPartial,以便我可以拆分页面和实现一些常见的功能,如菜单和等等。

所以,我试过如下:

  1. 我IIS7下创建一个新的站点
  2. 我在.cshtml文件下降与此代码:@DateTime.Now
  3. 我打开它通过镀铬

这显示了当前的日期和时间,清楚的是剃须刀引擎执行。

然后我试图以下代码:

@Html.RenderPartial("menu.cshtml") 

和我得到这个错误消息:

c:\inetpub\drip\dev2\index.cshtml(1,12): error CS1061: 'System.Web.WebPages.Html.HtmlHelper' does not contain a definition for 'RenderPartial' and no extension method 'RenderPartial' accepting a first argument of type 'System.Web.WebPages.Html.HtmlHelper' could be found (are you missing a using directive or an assembly reference?)

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

那么,有没有关于如何做到这一点的教程?这是否可能?

此代码:

@Html.GetType().FullName 

输出这样的:

System.Web.WebPages.Html.HtmlHelper

我并不需要使用Html作为标识符,如果我可以创建自己的变量引用正确的对象/类型/类实例,这对我来说已经足够了。

+1

你有没有ASP.NET Web Pages网站的所有必需的Web.config等东西? – bzlm 2012-02-15 15:43:40

+0

我试过了,似乎没有什么区别,至少没有考虑到这个特殊的例外情况。 – 2012-02-15 15:45:46

+0

但它是MVC 3还是网页? – bzlm 2012-02-15 15:47:04

回答

4

Clearly, the identifier Html refers to a different class than I expected.

是的,它是指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。那里有很多教程。

+0

这很好。我确定将Html切换到MVC类型也是可行的,但正如我所说的,我想使用剃须刀引擎,并基本上“包含”其他文件,这就足够了。 – 2012-02-15 16:20:29

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

我到底在哪里放?在web.config中,我觉得自己就是这样一个初学者,我试着将它与''并排放在一起,但是这给我一个错误,“请求的页面无法访问,因为页面的相关配置数据无效。” – 2012-02-15 16:06:32

+0

我编辑了web.config,清除了很多不需要的东西(我在这里发现了一个不同的问题),现在我得到这个错误:“InvalidCastException:无法投射'ASP._Page_index_cshtml类型的对象'键入'System.Web.IHttpHandler'。“。我的.cshtml文件中的代码仍然只是'@ Html.GetType()。FullName' – 2012-02-15 16:13:33

+0

您是否尝试过为ASP.NET MVC3项目使用默认生成的web.config?您添加的剃须刀的配置部分也需要注册。如果你无法获得一个atm,我粘贴了一个[here](http://pastebin.com/K7gv5saM)。 – 2012-02-15 16:26:16

相关问题