我如何创建一个WebRazorHostFactory,不搞砸智能感知

本文关键字:感知 智能 WebRazorHostFactory 何创建 创建 一个 | 更新日期: 2023-09-27 17:48:57

如果我像这样新建一个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中引用它。像这样配置:

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

视图文件中的智能感知不再识别:

中的"model"answers"TextBoxFor"
@model Test.Models.Person
<div>
    @this.Html.TextBoxFor( x => x.Name )
</div>

我如何使一个新的WebRazorHostFactory,不搞砸了智能感知在视图文件?

在MvcWebPageRazorHost我看到他们运行一个函数"GetRidOfNamespace("System.Web.WebPages.Html");",但我不确定这是否是问题?我试着写一个不同的类,做同样的事情,MvcWebPageRazorHost没有这个函数,它似乎没有效果。谢谢。

我如何创建一个WebRazorHostFactory,不搞砸智能感知

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

代码如下:

        var hostSection = WebConfigurationManager.GetSection(HostSection.SectionName, "/Views") as HostSection;
        if (hostSection != null)
        {
            hostSection.FactoryType = "Type.Name, Assembly";
        }

对于你可能有的任何区域都需要这样做。

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