0

我创建了一个包含按钮的基本复合服务器控件。

<Custom:Class1 ID="testClass" ClientInstanceName="test1" runat="server"></Custom:Class1>

我希望能够使用 javascript 访问子控件,例如:

var myButton = testClass.FindControl('btnTest');

有没有办法做到这一点?

4

3 回答 3

1

创建一个客户端对象来表示您的服务器端控件(javascript 类)。在客户端对象上放置对子控件的引用集合。然后在服务器端 OnPreRender 事件创建或加载脚本来定义您的客户端对象,同时将引用集合传递给其构造函数。

如何嵌入包含客户端对象定义的 javascript 文件的示例(将此 somwhere 放在命名空间声明之上:

[assembly: WebResource("myNS.stuff.clientSideObj.js", "application/x-javascript")]
namespace myNS.stuff
{

如何注册 WebResouce (OnPreRender) 的示例:

 ClientScriptManager cs = this.Page.ClientScript;// Get a ClientScriptManager reference from the Page class.
 Type csType = this.GetType();// Get the type from this class.

 //Register an embedded JavaScript file. The JavaScript file needs to have a build action of "Embedded Resource".
 String resourceName1 = "myNS.stuff.clientSideObj.js";
 cs.RegisterClientScriptResource(csType, resourceName1);

创建脚本以声明客户端对象 (OnPreRender) 实例的示例:

String childControlIDsList= getChildControlList();//I am not writing this one.. just look up javascript arrays.
String uniqueScriptKey = "myKey";
StringBuilder theScript = new StringBuilder();
theScript.AppendLine("var myObj = new clientSideObj(" + childControlIDsList + ");");
theScript.AppendLine("window['myClientControl'] = myObj;") //create a client side reference to your control.
cs.RegisterStartupScript(csType, uniqueScriptKey, theScript.ToString(), true);

我将把客户端对象定义留给你...希望有帮助!

于 2012-09-04T16:34:56.993 回答
0

如果您使用的是 .net 4.0,您可以设置ClientIDMode按钮上的 ' ' 属性,Static然后将 ID 属性设置为类似 ID="myButton" 并使用 jquery 访问它,如下所示

 $("#myButton")

如果你不使用 jquery,你可以使用

document.getElementById("myButton")

如果您在表单中多次使用该控件,您可以在按钮 ID 前加上您的自定义控件 ID。请记住将自定义控件的 ClientIDMode 属性也设置为静态。

<asp:Button ID="<%=Me.Id%>_myButton "  ClientIDMode="Static" runat="server"/>

不完全确定这甚至是一种好的做法,或者它是否会起作用,但您可以尝试一下。(请记住设置您的自定义控件 ID

于 2012-07-19T17:48:33.830 回答
0

这适用于 Sharepoint 可视化 Web 控件,但适用相同的一般过程:

http://lemonharpy.wordpress.com/2011/07/20/expose-clientid-to-javascript-in-sharepoint-2010-visual-web-control/

本质上,在页面后面的代码中,您会在页面上获得对 ClientId 的引用,然后将其公开为 javascript 变量,您可以将其添加到您的 jQuery 选择器上。

我觉得这有点hacky - 但我认为它可以完成工作......

于 2012-07-19T18:10:30.557 回答