1

我想调用一个可以从 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 选择的丑陋组合之外,还有更好的方法可以在单独的 JS 文件中获取 ASP.net 元素对象吗?

4

3 回答 3

2

我能想到的唯一一件事就是使用ClientIDModetopreditablestatic.

这是一个例子。

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

或者另一种方法是使用 RadWindowsManager

RadWindowManager让您RadWindow从 JavaScript 通过 ID 调用。

<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;
}
于 2013-07-17T16:20:06.670 回答
1

您可以在页面末尾编写一个小型 JavaScript 附件,并根据需要在外部文件中添加您希望处理的控件。

<script>
var controls = new function () {
    return {
        radWinManagerMain: {
            ClientID: "<%= radWinManagerMain.ClientID %>"
        },
        radWinManagerSub: {
            ClientID: "<%= radWinManagerSub.ClientID %>"
        }
    };
}();
</script>

我正在使用两个单独的 RadWindowManager,我想在外部 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

于 2017-04-20T14:05:49.007 回答
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();
于 2013-10-15T09:27:30.573 回答