尝试在Visual Studio 2010中构建网站项目时,我收到以下错误:
页面'/WebSite/controls/C2.ascx'不能使用用户控件'/WebSite/controls/C1.ascx',因为它在web.config中注册并与页面位于同一目录中.
我有2个Web用户控件:
controls/C1.ascx
controls/C2.ascx
Run Code Online (Sandbox Code Playgroud)
控件已在web.config中注册:
<configuration>
<system.web>
<pages>
<controls>
<add src="~/controls/C1.ascx" tagPrefix="my" tagName="C1"/>
<add src="~/controls/C2.ascx" tagPrefix="my" tagName="C2"/>
</controls>
</pages>
</system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)
C1.ascx只包含一个静态HTML,C2.ascx试图包含C1:
C1.ascx只包含一些简单的静态简单HTML.C2.ascx试图包含C1.ascx:
<%@ Control Language="VB" %>
<my:C1 runat="server" />
<p>Hello from C2</p>
Run Code Online (Sandbox Code Playgroud)
在尝试构建项目时,我收到顶部的错误消息.我意识到可以通过向C2.ascx添加另一个Register指令来修复此问题...:
<%@ Register Src="~/controls/C1.ascx" TagPrefix="ctl" TagName="C1" %>
Run Code Online (Sandbox Code Playgroud)
...但我想知道是否有更清洁的解决方案,为什么我首先得到错误?
我的设置:在 IIS 6.0 上运行的 ASP.NET 4.0 网站。
我有一个站点,其中包含许多带有虚拟 URL 的登录页面,所有页面都由单个物理登录页面.aspx 文件(通过 ASP.NET 4.0 路由)提供服务,我在其中使用OutputCache指令,将页面缓存在服务器上 24 小时。
最近,我开始遇到__doPostBack一些生成的页面中缺少 JavaScript 块的问题。页面中有一个 LinkButton(在 webusercontrol 内),所以 JS 块应该在那里,但有时它没有。这自然会导致在单击 LinkButton 时浏览器中出现 JS 错误。
我的怀疑是,可能在第一次访问由上述物理 .aspx 文件处理的给定 URL 时,它可能是客户端(浏览器或搜索机器人)的访问,这可能被 ASP.NET 视为故障级浏览器,因此 doPostBack 没有输出到生成的页面缓存版本中,然后将这个错误的缓存版本提供给所有后续访问者......?另一方面,我想说 ASP.NET 足够聪明,可以为不同级别的浏览器生成不同的缓存版本,不是吗?
尽管如此,我的问题是:我能否在服务器的某个地方找到提供给访问者的缓存文件,并以某种方式检查我的假设是否正确?另外,我想完全禁用浏览器的这种 ASP.NET 识别,并为每个浏览器提供相同的内容,就像它为任何现代浏览器提供服务一样。
非常感谢您的任何建议和帮助。