C# 如果页上不存在依赖控件,则引发错误

C# 如果页上不存在依赖控件,则引发错误,c#,asp.net,jquery,ajaxcontroltoolkit,C#,Asp.net,Jquery,Ajaxcontroltoolkit,好的,我正在制作两个JQuery版本的AJAXToolkit控件(我们在工具包中遇到了问题),并希望在页面上提供它们所需的脚本的通用版本 为此,我打算使用JQueryControlManager控件,并使用它动态插入脚本,最好只插入页面上控件所需的脚本 是否有人知道一种有效的方法: 检查页面上是否存在ControlManager控件(如果其他JQueryControl存在) 将每个控件添加到ControlManager内的集合中,假设第一点的答案不返回JQueryControlManager实

好的,我正在制作两个JQuery版本的AJAXToolkit控件(我们在工具包中遇到了问题),并希望在页面上提供它们所需的脚本的通用版本

为此,我打算使用JQueryControlManager控件,并使用它动态插入脚本,最好只插入页面上控件所需的脚本

是否有人知道一种有效的方法:

  • 检查页面上是否存在ControlManager控件(如果其他JQueryControl存在)
  • 将每个控件添加到ControlManager内的集合中,假设第一点的答案不返回JQueryControlManager实例


有人对更好的解决方案有什么建议吗?

特别是对于脚本,ASP.NET已经有了一个很好的ScriptManager类,它支持您尝试执行的操作。召唤

Page.ClientScript.RegisterClientScriptInclude(key, url);
从您的控件中为每个脚本使用唯一的键,框架将注意避免重复。
ClientScriptManager
上还有其他类似的方法可能有用

如果您仍然需要创建ControlManager的实例,您可以在
页面.Controls
集合上枚举,以查找该类型的控件,即

public ControlManager GetControlManager()
{
    foreach (Control control in Page.Controls)
    {
        if (control is ControlManager)
            return (ControlManager)control;
    }

    ControlManager manager = new ControlManager();
    Page.Controls.Add(manager);

    return manager;
}
或者您可以尝试将ControlManager的实例存储在
页面.Items
字典中


警告:我尚未测试此代码,因此将其视为伪代码。

特别是对于脚本,ASP.NET已经有了一个很好的ScriptManager类,它支持您尝试执行的操作。召唤

Page.ClientScript.RegisterClientScriptInclude(key, url);
从您的控件中为每个脚本使用唯一的键,框架将注意避免重复。
ClientScriptManager
上还有其他类似的方法可能有用

如果您仍然需要创建ControlManager的实例,您可以在
页面.Controls
集合上枚举,以查找该类型的控件,即

public ControlManager GetControlManager()
{
    foreach (Control control in Page.Controls)
    {
        if (control is ControlManager)
            return (ControlManager)control;
    }

    ControlManager manager = new ControlManager();
    Page.Controls.Add(manager);

    return manager;
}
或者您可以尝试将ControlManager的实例存储在
页面.Items
字典中


警告:我还没有测试这段代码,所以将其视为伪代码。

使用Scriptmanager并不是我真正想要的:我计划做一些聪明的事情,使用$(function(){})导入脚本;至于在Page.Controls上进行迭代,这是非常低效的(同样,Page.Controls需要递归地进行迭代),而且当页面上有大约50个相关控件时,会有点痛苦!页面。项目可能会工作…是的,如果性能是一个问题,那么页面。项目会更好。我不确定您是否需要递归迭代,但是-您是否要在一个页面上的控件层次结构的不同级别上有多个这样的ControlManager?嗯,您需要递归,除非它位于页面的最顶层,所以如果您使用母版页,可能会出现问题。我将使用Page.Items[typeof(ControlManager)],这是scriptmanager的工作方式,所以我想这是最好的选择。使用scriptmanager并不是我真正想要的:我计划做一些聪明的事情,用它导入脚本,并使用$(function(){});至于在Page.Controls上进行迭代,这是非常低效的(同样,Page.Controls需要递归地进行迭代),而且当页面上有大约50个相关控件时,会有点痛苦!页面。项目可能会工作…是的,如果性能是一个问题,那么页面。项目会更好。我不确定您是否需要递归迭代,但是-您是否要在一个页面上的控件层次结构的不同级别上有多个这样的ControlManager?嗯,您需要递归,除非它位于页面的最顶层,所以如果您使用母版页,可能会出现问题。我将使用Page.Items[typeof(ControlManager)],这是scriptmanager的工作方式,所以我想这是最好的选择。