我有一个在Visual Studio 2008中构建的C#Web应用程序,我们在很大程度上依赖于“pre-built”ASP.NET块的用户控件。
我们不是在每个页面上注册大量用户控件,而是在本地(到特定文件夹)web.config文件中注册所有控件。优点是我们可以使用控件,并且页面在源视图中看起来“更干净”。但是,VS2008设计视图和智能感知都无法识别控件在web.config
中注册的事实。但是,应用程序本身按预期工作。
通常在每个页面的顶部我们都有这样的标签:
<%@ Register src="~/CommonControls/Foo.ascx" tagname="Foo" tagprefix="Bar" %>
我们在本地web.config中注册控件,如下所示:
<?xml version="1.0"?>
<configuration>
<system.web>
<pages>
<controls>
<add src="~/CommonControls/Foo.ascx" tagName="Foo" tagPrefix="Bar"/>
</controls>
</pages>
</system.web>
</configuration>
有没有人知道让Intellisense识别这些自定义控件的修复程序?或者,有更好的方法吗?
答案 0 :(得分:2)
虽然这在本地Web.Config文件中不起作用,但您可以使用根web.config文件中的Location标记来获得相同的结果。
例如:
<?xml version="1.0"?>
<configuration>
<location path="MyPath">
<system.web>
<pages>
<controls>
<add src="~/CommonControls/Foo.ascx" tagName="Foo" tagPrefix="Bar"/>
</controls>
</pages>
</system.web>
</location>
</configuration>
答案 1 :(得分:1)
这可能与它未在主web.config文件中注册的事实有关。通过在主web.config文件中放置一个或两个引用来测试它。
答案 2 :(得分:1)
我尝试了您的示例代码,Intellisense在aspx页面的代码视图和后面的代码中都有效。您可以检查用户控件的类名,默认情况下,visual studio在类名中包含文件夹名称。所以您的控件可能会被命名为 CommonControls_Foo 而不是 Foo 。
无论哪种方式,web.config文件都与后面的代码的Intellisense无关。检查类的名称和名称空间。
答案 3 :(得分:0)
可能是因为您正在注册控件两次并且intellisense无法解析引用吗?
我会认为控件应该在配置文件或页面指令
中注册