如何创建一个不会搞乱intellisense的WebRazorHostFactory?

时间:2011-04-04 11:45:14

标签: c# asp.net-mvc razor 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;
        }
    }
}

并在〜/ Views / Web.config中引用它,如下所示:

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

我的视图文件中的intellisense不再识别“模型”和“TextBoxFor”:

@model Test.Models.Person

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

如何创建一个新的WebRazorHostFactory,它不会弄乱视图文件中的intellisense?

在MvcWebPageRazorHost中,我看到他们运行了一个函数“GetRidOfNamespace(”System.Web.WebPages.Html“);”,但我不确定这是不是问题?我试图编写一个与MvcWebPageRazorHost完全相同但不使用此函数的其他类,它似乎没有任何效果。感谢。

2 个答案:

答案 0 :(得分:2)

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

以下是代码:

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

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

这也需要针对你可能拥有的任何领域。

答案 1 :(得分:1)

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