【问题标题】:Creating composite control with client feature使用客户端功能创建复合控件
【发布时间】:2010-11-07 17:08:30
【问题描述】:

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

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

假设我希望它具有 Listview(html select) 控件,onselect 将根据所选值运行 javascript 函数。

我不能只是动态创建控件是客户端js,因为控件在设计模式下有UI,所以我必须在服务器端创建选择控件(我在override void Render中创建它)

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

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

【问题讨论】:

    标签: c# javascript asp.net ajax


    【解决方案1】:

    使用对象的 Attributes 集合,您可以添加所需的 onselect 属性。只需拨打HtmlSelect.Attributes.Add("onselect", "functionYouWantToCall();");

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

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

    无论是否在 ASPX 页面中,一旦添加到页面中,控件就可以访问 Page 属性,这将使您能够访问 Page 以及 ClientScript 属性。

    同样,您可以将 JS 文件嵌入到 DLL 中,并使用 ClientScript.RegisterClientScriptResource 方法让 IIS 自动提供这些文件。

    【讨论】:

    • 我应该在哪里定义functionYouWantToCall()?
    • 我无法直接从服务器端访问客户端对象(ScriptReference)。
    • 问题是这不是aspx页面,是dll控件
    • 如果您的控件被添加到页面中,您可以使用控件的 Page 属性访问页面的所有属性。我编辑了我的答案以反映如何做到这一点。
    【解决方案2】:

    这里讨论了一个类似的主题。如果您有兴趣,请尝试一下 http://able2know.org/topic/2802-1

    【讨论】:

      【解决方案3】:

      为什么不让您的控件创建 javascript 并让控件注册? 这是我放在 cmets 中的链接。它被称为从 ASP.NET 服务器控件注入客户端脚本 - http://msdn.microsoft.com/en-us/library/aa478975.aspx

      【讨论】:

      • 在控件的页面加载(或其他事件)中 - 我找到了您可能想要的这个示例。 msdn.microsoft.com/en-us/library/aa478975.aspx
      • 这个可以,但是很丑。我希望得到更好的解决方案。一些可以使用Ajax ScriptControl的东西
      猜你喜欢
      • 2019-03-28
      • 1970-01-01
      • 1970-01-01
      • 2014-02-18
      • 2013-11-23
      • 2018-12-07
      • 1970-01-01
      • 2012-08-08
      • 1970-01-01
      相关资源
      最近更新 更多