我想调用一个可以从ASP.net Sys.Application方法“$ find”返回的元素的方法。在这种情况下,它是一个telerik RadWindow控件(ID =“MyWindow”),我想调用.show()方法。
问题是在单独的JS文件中获取控件的正确客户端ID ,因为在ASP.net框架中修改了ID。为此,我目前使用
$find($("[ID$=MyWindow]")[0].id).show();
如果页面上只有一个id以“MyWindow”结尾的元素,则此方法有效。不幸的是,控件有时会在页面上添加一些奇怪的包装元素,其中id以“MyWindow”结尾。
所以我的问题:除了这个丑陋的$ find和jquery选择组合之外,还有更好的方法将ASP.net元素对象放在一个单独的JS文件中吗?
答案 0 :(得分:2)
我唯一能想到的就是将ClientIDMode
用于preditable
或static
。
即使这样,你也要小心碰撞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();
}
RadWindowManager
可让您通过JavaScript来识别RadWindow
。
<telerik:RadWindowManager ID="RadWindowManager1" runat="server" ...>
<Windows>
<telerik:RadWindow ID="RadWindow1" runat="server">
</telerik:RadWindow>
</Windows>
</telerik:RadWindowManager>
// Separate JS File
function showForm(url) {
window.radopen(url, "RadWindow1");
return false;
}
答案 1 :(得分:1)
您可以在页面末尾编写一个小型JavaScript附件,并根据需要添加您希望在外部文件中处理的控件。
<script>
var controls = new function () {
return {
radWinManagerMain: {
ClientID: "<%= radWinManagerMain.ClientID %>"
},
radWinManagerSub: {
ClientID: "<%= radWinManagerSub.ClientID %>"
}
};
}();
</script>
我正在使用两个单独的RadWindowManagers,我想在外部JS文件中解决这个问题。 GetRadWindowManager()总是返回页面上的第一个RadWindowManager实例。因此,我选择了这种方法。
当调用函数(在外部JS中实现)时,我传递对返回ID的控件的引用。
<telerik:NavigationNode NavigateUrl="javascript:showWindow(controls.radWinManagerMain,'winSettings');" value="settings" Text="Settings" SpriteCssClass="fa fa-cog" runat="server" />
在外部JS文件中:
function showWindow(control, windowName) {
$find(control.ClientID).open(null, windowName);
some more code here...
}
我发现了这个想法:http://www.telerik.com/blogs/simplify-javascript-control-references-in-asp.net-webforms
答案 2 :(得分:0)
另一种方法是使用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>
JS文件:
$find(MyControls.MyRadWindow).show();