2011-04-04 15 views
1

如果我创建一个新的WebRazorHostFactory这样的:如何创建不会搞乱intellisense的WebRazorHostFactory?

namespace Test 
{ 
    public class TestMvcWebRazorHostFactory : WebRazorHostFactory 
    { 
     public override WebPageRazorHost CreateHost(string virtualPath, string physicalPath) 
     { 
      WebPageRazorHost host = base.CreateHost(virtualPath, physicalPath); 

      if (!host.IsSpecialPage) 
      { 
       return new MvcWebPageRazorHost(virtualPath, physicalPath); 
      } 

      return host; 
     } 
    } 
} 

和〜引用它/浏览/ Web.config中是这样的:

<system.web.webPages.razor> 
    <host factoryType="Test.TestMvcWebRazorHostFactory" /> 
    ... 
</system.web.webPages.razor> 

我认为文件中的智能感知不再承认“模式”和‘TextBoxFor’中:

@model Test.Models.Person 

<div> 
    @this.Html.TextBoxFor(x => x.Name) 
</div> 

我如何做一个新WebRazorHostFactory那不乱了智能感知的视图文件?

在MvcWebPageRazorHost我看到他们运行一个函数“GetRidOfNamespace(”System.Web.WebPages.Html“);”,但我不知道这是否是问题?我试图编写一个不同于MvcWebPageRazorHost而没有此功能的类,它似乎没有任何作用。谢谢。

+0

GetRidOfNamespace方法不应该导致这个问题,它会删除由ASP.Net Web页提供的名称空间,因为它们与ASP.Net MVC冲突。 MvcWebPageRazorHost然后继续**添加** MVC相关的命名空间。至于发生了什么,我不是100%确定的。你能解释你为什么要改变主持人吗?智能感知应该在通过web.config注册的自定义主机上进行,但它是为MVC设计的,所以有可能出现故障。 – 2011-04-04 17:33:55

+0

我正在着手编写一个自定义的WebPageRazorHost,它可以删除大多数标签之间的空格(例如,因为它们位于不同的行上,所以删除之间的空格: )。我按照预期工作,但intellisense无法正常工作,所以我只使用了上面给出的最基本的示例(提供默认的MvcWebPageRazorHost),这对于intellisense也不起作用。 – DangerMoose 2011-04-04 21:46:28

回答

1

您需要将包含自定义工厂的程序集安装到GAC中,以便Visual Studio可以使用它。

2

我通过在Global.asax.cs中的Application_Start中的运行时更改它来实现它。

下面的代码:

 var hostSection = WebConfigurationManager.GetSection(HostSection.SectionName, "/Views") as HostSection; 

     if (hostSection != null) 
     { 
      hostSection.FactoryType = "Type.Name, Assembly"; 
     } 

这就需要你可能有,以及任何领域工作要做。

+0

我不得不使用“〜/ Views”作为路径(请注意代字号),因为我的应用程序可以在虚拟路径中运行。 – 2012-10-02 22:50:07