我创建了一个包含按钮的基本复合服务器控件。
<Custom:Class1 ID="testClass" ClientInstanceName="test1" runat="server"></Custom:Class1>
我希望能够使用 javascript 访问子控件,例如:
var myButton = testClass.FindControl('btnTest');
有没有办法做到这一点?
我创建了一个包含按钮的基本复合服务器控件。
<Custom:Class1 ID="testClass" ClientInstanceName="test1" runat="server"></Custom:Class1>
我希望能够使用 javascript 访问子控件,例如:
var myButton = testClass.FindControl('btnTest');
有没有办法做到这一点?
创建一个客户端对象来表示您的服务器端控件(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);
我将把客户端对象定义留给你...希望有帮助!
如果您使用的是 .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
这适用于 Sharepoint 可视化 Web 控件,但适用相同的一般过程:
本质上,在页面后面的代码中,您会在页面上获得对 ClientId 的引用,然后将其公开为 javascript 变量,您可以将其添加到您的 jQuery 选择器上。
我觉得这有点hacky - 但我认为它可以完成工作......