c# - 无法将用户控制注册移动到嵌套的 web.config 中

标签 c# asp.net visual-studio-2010 web-config

好吧,我已经为此苦苦思索了将近五个小时,所以我想是时候问一问了。

我正在 Visual Studio 2010(专业版)中开发一个 Web 应用程序(.NET 4.0、C#、ASP.NET、AJAX、jQuery),它有几个部分。我们称他们为 Mo、Larry 和 Curly,每个人都位于项目的一个子文件夹中。目前,每个控件都有几个用户控件,存储在其特定文件夹下名为 Controls 的子文件夹中,所有这些控件都在根 web.config 中声明。

所以我们有这样的东西:
WebApp - Web.config
--莫
----控制
--拉里
----控制
-- curl
----控制

我正在尝试更好地“模块化”Web 应用程序,并希望能够(到目前为止没有成功)将用户控件声明移动到嵌套的 Web.configs 中,以便它们不能被全局引用。我试图通过将控件声明移动到位于 Stooge 命名文件夹中的 Web.configs 来实现这一点。 Intellisense 提示说它们不是已知元素,但只要我不尝试对使用这些控件的页面进行任何修改,它就会起作用。一旦我这样做,(即使是像按 Enter 换行这样简单的事情)设计者都吓坏了并删除了对控件的引用。

我已经在命名文件夹和子控件文件夹中尝试了 web.configs。我也尝试在两个级别的 web.configs 中包含命名空间。

那么,有人有什么想法吗?


示例 web.config 声明:

<?xml version="1.0"?>    
<configuration>
   <system.web>
      <pages>
         <controls>
            <add tagPrefix="curlyctrl" 
                 src="~/Curly/Controls/NuykNuyk.ascx" 
                 tagName="joke"/>
         </controls>
      </pages>
   </system.web>
</configuration>

最佳答案

我建议将您的控件放入它们自己的类库中并根据命名空间。这样做的第二个优点是,如果控件需要错误修复或更改,您可以编译类库并在服务器上更新它,而无需重新编译您的 Asp.Net 应用程序。我真的没有看到任何其他方式来模块化 Asp.Net 控件,这实际上有利于您的应用程序的开发。

如果选择按汇编方式模块化,只需使用不同的标签前缀就可以区分同名控件。例如,假设您有以下程序集和控件:

ServerControl1.dll

  • ServerControl1

ServerControl2.dll

  • ServerControl1

您应该按如下方式在页面中注册控件:

<%@ Register assembly="ServerControl1" namespace="ServerControl1" tagprefix="mo" %>
<%@ Register assembly="ServerControl2" namespace="ServerControl2" tagprefix="larry" %>

<mo:ServerControl1 ID="ServerControl1" runat="server" />
<larry:ServerControl1 ID="ServerControl2" runat="server" />

希望对您有所帮助。我在理解你试图通过模块化其他可能更容易的组织或差异化来完成什么时遇到了一些麻烦。但是,如果您为控件命名具有歧义的相同名称,您实际上只会遇到差异化问题。

关于c# - 无法将用户控制注册移动到嵌套的 web.config 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3267406/

相关文章:

c# - 团结 : player moves up without any such code

带有 jQ​​uery json 的 ASP.NET WebMethod 有大小限制吗?

visual-studio-2010 - Visual Studio 网站构建在 CI 服务器上间歇性失败

c# - 同时接收 PictureBox 和 DataGridViewImageCell 的函数

c# - 如何从 C# 中的 JSON 字符串中获取一些值?

c# - MEF 可以导出/导入静态类吗?

javascript - AJAX "success"在返回响应之前执行

c# - 在基本 Controller MVC 中实现逻辑

linq - F# 和 PLINQ 扩展方法

visual-studio-2010 - 在Visual Studio中关闭整行复制