使用$find和jquery选择器在ASP.net应用程序中获取对象的替代方法
我想调用可以从ASP.net Sys.Application方法“$find”返回的元素的方法。在本例中,它是一个telerik RadWindow控件(ID=“MyWindow”),我想调用.show()方法 问题是在单独的JS文件中获取控件的正确客户端id,因为id在ASP.net框架中被修改。为此,我目前使用使用$find和jquery选择器在ASP.net应用程序中获取对象的替代方法,jquery,asp.net,controls,radwindow,clientid,Jquery,Asp.net,Controls,Radwindow,Clientid,我想调用可以从ASP.net Sys.Application方法“$find”返回的元素的方法。在本例中,它是一个telerik RadWindow控件(ID=“MyWindow”),我想调用.show()方法 问题是在单独的JS文件中获取控件的正确客户端id,因为id在ASP.net框架中被修改。为此,我目前使用 $find($("[ID$=MyWindow]")[0].id).show(); 如果页面上只有一个id以“MyWindow”结尾的元素,则此选项有效。不幸的是,控件有时会向id以
$find($("[ID$=MyWindow]")[0].id).show();
如果页面上只有一个id以“MyWindow”结尾的元素,则此选项有效。不幸的是,控件有时会向id以“MyWindow”结尾的页面添加一些奇怪的包装器元素
所以我的问题是:除了$find和jquery选择的丑陋组合之外,还有没有更好的方法将ASP.net元素对象放在一个单独的JS文件中呢?我能想到的唯一一件事就是使用
clientdmode
进行可预测的或静态的
即使这样,您也要小心碰撞ID
<telerik:RadWindowID="RadWindow1" runat="server" ClientIDMode="Static" ...>
</telerik:RadWindow>
// Separate JS File
function showForm(url) {
var oWnd = $find("RadWindow1");
oWnd.setUrl(url);
oWnd.show();
}
另一种方法是使用ASPX文件中所有控件的名称创建一个对象,并从JS文件访问它
ASPX文件:
<telerik:RadWindowManager ID="RadWindowManager1" runat="server" ...>
<Windows>
<telerik:RadWindow ID="RadWindow1" runat="server">
</telerik:RadWindow>
</Windows>
</telerik:RadWindowManager>
<script type="text/javascript">
var MyControls = {
MyRadWindow: '<%= RadWindow1.ClientID %>'
};
</script>
您可以在页面的末尾编写一个小的JavaScript附件,并根据需要在外部文件中添加希望处理的控件
<script>
var controls = new function () {
return {
radWinManagerMain: {
ClientID: "<%= radWinManagerMain.ClientID %>"
},
radWinManagerSub: {
ClientID: "<%= radWinManagerSub.ClientID %>"
}
};
}();
</script>
我在上找到了这个想法:您使用的是哪个版本的ASP.NET?@KarlAnderson ASP.NET 4.0您的第一个建议解决了通过$find(“MyWindow”)
获取正确对象的问题,但是我在Telerik.Web.UI
类中遇到了异常。我猜这是因为窗口中包含了更多的telerik组件,ID被弄乱了。我还发现了使用RadWindowManager的可能性,我可以在这种特定情况下使用它。但如果是另一个没有相应管理器的元素呢?Telerik控件不支持clientMode=“static”
。事实上,他们似乎只支持clientdmode=“AutoID”
,根据
$find(MyControls.MyRadWindow).show();
<script>
var controls = new function () {
return {
radWinManagerMain: {
ClientID: "<%= radWinManagerMain.ClientID %>"
},
radWinManagerSub: {
ClientID: "<%= radWinManagerSub.ClientID %>"
}
};
}();
</script>
<telerik:NavigationNode NavigateUrl="javascript:showWindow(controls.radWinManagerMain,'winSettings');" value="settings" Text="Settings" SpriteCssClass="fa fa-cog" runat="server" />
function showWindow(control, windowName) {
$find(control.ClientID).open(null, windowName);
some more code here...
}