<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ArticleView.aspx.cs" Inherits="MyNameSpace.ArticleView" %>
在该控件中,我使用了<%=%>指代我在代码隐藏文件中声明的成员.如果我编译和部署控件,它可以正常工作.但是在Visual Studio中,我得到了很多设计时错误,“{some variable}在当前上下文中不存在”.而Intellisense也是一样的:它适用于UserControl的成员,但找不到我自己声明的成员.还有其他问题.一般来说,一切都指向ASP.articleview_ascx类生成的事实,不知何故不能继承自MyNameSpace.ArticleView类.
我发现如果我将CodeBehind属性切换到“CodeFile”:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ArticleView.aspx.cs" Inherits="MyNameSpace.ArticleView" %>
突然间Intellisense工程和所有的设计时错误消失.但我不想做运行时编译,或部署我的.ASCX.CS文件 – 所以我不能使用CodeFile.
我检查了简单的东西,就像确保我的CodeBehind文件名正确& Inherits类具有正确的命名空间等(并且因为在将属性更改为CodeFile之后它们正常工作,所以它们必须指向正确的位置….)但是我缺少什么?为什么不能处理CodeBehind属性?
谢谢,
史蒂夫
更新:从下面的线程 – 基本的问题是,为什么不使用CodeFile?答:当我尝试在我的文件中使用CodeFile =部署时,部署后我收到以下堆栈跟踪(全部呈现):
/_layouts/Pages/ViewPage.aspx.cs’ does not exist. at System.Web.UI.Util.CheckVirtualFileExists(VirtualPath virtualPath) at System.Web.UI.TemplateParser.ProcessCodeFile(VirtualPath codeFileVirtualPath) at System.Web.UI.TemplateParser.ProcessMainDirectiveAttribute(String deviceName,String name,String value,IDictionary parseData)
(这是从/_layouts/Pages/ViewPage.aspx的请求.ViewPage是具有其他几个控件的页面,包括我原始示例中提到的ArticleView,它恰好是第一个失败的文件 – 如果我回到CodeBehind =在ViewPage中,然后包含ASCX与CodeFile =将以相同的方式失败.)这似乎是页面编译器抱怨,因为继承的codebehind类不能在任何加载的DLL中找到,所以它期望必须有一个CS文件做按需编译.
这里的问题是我不想部署CS文件,只是ASPX / ASCX.阅读了许多文章像this great one我知道各种新的部署模式,虽然我从来没有使用任何东西,但一个Web应用程序项目(从VS2003转换,我们是迟到的采纳者,2005年和WAP模型已经当我们从2003年开始的时候被添加.)在许多VS2005 / 8项目中,我从未遇到过CodeBehind =的问题,直到这个Intellisense问题出现了…虽然这不足以帮助我在这种情况下“部署到SharePoint,这引入了一个全新的复杂程度.
由于我以前没有使用过CodeFile,所以很有可能我在构建时想要在VS中设置一些选项,以强制预编译.像我今天一样,我只需要能够部署一套具有单一代码隐藏DLL的ASPX / ASCX.而今天,CodeBehind = …它只是有原来提到的Intellisense问题,这是真的我想要修复:)
会发布更多,因为我确定什么文件可能与问题有关…