Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用$find和jquery选择器在ASP.net应用程序中获取对象的替代方法_Jquery_Asp.net_Controls_Radwindow_Clientid - Fatal编程技术网

使用$find和jquery选择器在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以

我想调用可以从ASP.net Sys.Application方法“$find”返回的元素的方法。在本例中,它是一个telerik RadWindow控件(ID=“MyWindow”),我想调用.show()方法

问题是在单独的JS文件中获取控件的正确客户端id,因为id在ASP.net框架中被修改。为此,我目前使用

$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...
}