Asp.Net MVC 3中不同命名空间的自定义WebViewPage会破坏IntelliSense功能

9
我有一个自定义类,它扩展了WebViewPage,并且我使用这个方法作为所有Razor视图的基础,具体方法请参考这里:http://haacked.com/archive/2011/02/21/changing-base-type-of-a-razor-view.aspx。一切都很顺利,除非我将其移动到与视图本身不同的命名空间中,此时智能感知功能就会停止工作(是的,在web.config文件的system.web.webPages.razor部分的命名空间中包括了自定义WebViewPage的命名空间)。有没有办法解决这个问题?
我的最终目标是将所有视图移到另一个项目中,让图形设计师可以访问,但我不想在该项目中包含自定义的WebViewPage类。这样做是否可能而不破坏智能感知功能?

1
你是如何设置基础类型的? - SLaks
2个回答

12

这听起来有点傻,但是请尝试重建并重新启动 Visual Studio 几次 :-D

我刚刚复制了这个问题,并尝试了所有方法(包括在 <pages> 中更改 pageBaseType 以及其他方法)。我重启了 VS,它就开始工作了。删除了 <pages> 部分后,经过多次清理/重建/重启之后,它仍然能正常工作。

我的 Views/Web.config 文件如下:

<system.web.webPages.razor>
    <pages pageBaseType="ClassLibrary1.MyBasePage">
</system.web.webPages.razor>

我的web项目引用了ClassLibrary1项目。

我的自定义类(在ClassLibrary1中)看起来像这样:

namespace ClassLibrary1
{
    public abstract class MyBasePage<T> : WebViewPage<T>
    {
        public string DannyName { get; set; }

        public MyBasePage()
        {
            this.DannyName = "Danny Tuppeny";
        }
    }
}

当我在网络项目的Views/Home/Index.cshtml中输入"@D"时,智能感知会自动提示"@DannyName"。

我尝试了一些可能会影响它的事情,但在我删除它后仍然有效:

  • 在Views/web.config的
    中添加pageBaseType
  • 添加一个非泛型版本的类:
    • public abstract class MyBasePage : MyBasePage { }

2
我发现只需要重新启动Cassini/IIS Express/IIS Web服务器就可以了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接