替代使用$ find和jquery选择器以获取ASP.net应用程序中的对象

时间:2013-07-17 15:59:21

标签: jquery asp.net controls radwindow clientid

我想调用一个可以从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文件中吗?

3 个答案:

答案 0 :(得分:2)

我唯一能想到的就是将ClientIDMode用于preditablestatic

Here is an example.

即使这样,你也要小心碰撞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();
}

或另一个apporach是使用RadWindowsManager

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