繁体   English   中英

使用JavaScript ASP.NET获取服务器控件上的子控件

[英]Get child controls on server control using javascript ASP.NET

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

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

我希望能够使用javascript来访问子控件:

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

反正有这样做吗?

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

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

[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);

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

如果您使用的是.net 4.0,则可以将按钮上的“ ClientIDMode ”属性设置为“ Static然后将ID属性设置为类似ID =“ myButton”的内容,并使用jquery进行访问,如下所示

 $("#myButton")

如果您不使用jQuery,则可以使用

document.getElementById("myButton")

如果您在表单中多次使用控件,则可以在按钮ID之前添加自定义控件ID。 切记还要将自定义控件的ClientIDMode属性也设置为static。

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

不能完全确定这是否是一种很好的做法,或者是否可以使用,但是您可以尝试一下。(切记设置您的自定义控件ID

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM