C# 使用客户端功能创建复合控件

C# 使用客户端功能创建复合控件,c#,javascript,asp.net,ajax,C#,Javascript,Asp.net,Ajax,我想开发复合控件,其中一些工作将在客户端执行。 为此,我正在实现IScriptControl ScriptReference指向具有客户端对象的脚本文件 假设我希望它有Listviewhtml选择控件,onselect将根据所选值运行javascript函数 我不能只是动态地创建控件,因为控件在设计模式下有UI,所以我必须在服务器端创建select控件,我在override void Render中创建它 我的问题是如何以及在何处为选择分配onselect事件 更新: 也许我应该将select的

我想开发复合控件,其中一些工作将在客户端执行。 为此,我正在实现IScriptControl

ScriptReference指向具有客户端对象的脚本文件

假设我希望它有Listviewhtml选择控件,onselect将根据所选值运行javascript函数

我不能只是动态地创建控件,因为控件在设计模式下有UI,所以我必须在服务器端创建select控件,我在override void Render中创建它

我的问题是如何以及在何处为选择分配onselect事件

更新:
也许我应该将select的id作为属性添加到ScriptControlDescriptor,然后在客户端控件中检索此id并将所需的处理程序附加到事件?

使用对象的属性集合,可以添加所需的onselect属性。只需调用HtmlSelect.Attributes.Addonselect,functionYouWantToCall

为了澄清这一点,如果HTML Select是在C中的服务器端渲染期间创建的,那么上面的一行将用于注册onselect客户端事件,以调用functionYouWantToCall java脚本方法

有很多方法可以在运行时将javascript函数添加到ASP.NET页面,或者包括静态JS文件。为此,请查看文档

无论是否在ASPX页面中,一旦添加到页面,控件都可以访问page属性,这将使您能够访问该页面,从而访问ClientScript属性


同样,您可以在DLL中嵌入JS文件,并使用该方法让IIS自动为其提供服务。

为什么不让您的控件创建javascript并注册控件? 这是我在评论中的链接。这称为从ASP.NET服务器控件注入客户端脚本
-

这里讨论了一个类似的话题。如果你感兴趣,试试看

我应该在哪里定义FunctionYouWantCall?我无法直接从服务器端访问客户端对象ScriptReference。问题是这不是一个aspx页面,而是一个dll控件。如果将控件添加到页面,则可以使用控件的page属性访问该页面的所有属性。我编辑了我的答案以反映如何做到这一点。在页面加载或控件的另一个事件中,我找到了您可能需要的示例。这是可行的,但很难看。我希望得到更好的解决方案。一些可以使用Ajax脚本控件的东西