0

当我的 RadGrid 离开编辑模式时,我需要获取 RadComboBox 的客户端实例(或新选择的 RadComboBox 值),以便我可以将更改的值回发到服务器。

问题是,对象的客户端 id 总是在变化。此外,RadComboBoxes 不是在运行时创建的——它们仅在用户双击我的 RadGrid 的特定行后创建。因此,语法如

var SundayLoc = $find("<%= FieldOpsScheduler_ctl00_ctl05_RCB_SunLocale.ClientID %>");

等于失败。在我开始改变价值观之前,我能够摆脱这个:

var SundayLoc = $find("FieldOpsScheduler_ctl00_ctl05_RCB_SunLocale");

每次都完美地工作,直到我添加了一些行分隔符对象,现在导致 id 的“ctl05”总是根据用户进入编辑模式的行而改变。我已经尝试使用所有获取此对象及其值的事项,但无济于事。

我打算尝试使用正则表达式,直到在RegEx 阅读了 bobince 的社区 wiki 答案之后,除了 XHTML 自包含标签之外的开放标签让我意识到用正则表达式解析 HTML 的诱惑是邪恶的撒旦的工作 - spawn (经过进一步研究,我得出结论,正则表达式可能对我没有帮助)。

无论如何,如果有人能以我的方式提出一些想法,我将不胜感激。先感谢您。

4

2 回答 2

0
  • 在服务器端创建某种列表以跟踪控件 ID
  • 当您出于任何原因呈现页面时,将这些 id 写在脚本块中(将它们放入数组或其他任何内容中)
  • 当您需要提交您的值时,您可以使用 javascript 数组内容来引用控件。

您可能需要做更多的工作才能找到您的实际值。对于 ingragistics 的花式裤子控件,它们提供了一种特殊的方法来获取有关整个“控件”的信息。rad 控件可能有类似的东西。

于 2010-07-22T19:40:51.857 回答
0

好的,所以我最终得出的答案并不是很有说服力,但它是 100% 可靠的,并且都在客户端(这很好,因为我的公司将 IE7 作为其标准 Web 浏览器 x_x)。

我能够摆脱一堆 $find 命令和 if 语句,因为我不再需要搜索特定的 HTML id。

        function SelectedIndexChanged(sender,eventArgs)
        {
            var rcbID = sender.get_id();
            var LocID = rcbID.substring(0,37) + "Locale";
            pastCombo = currentCombo;
            currentCombo = eventArgs.get_item().get_text();

            if(editedRow != null)
            {
                var Location = $find(LocID);

由于 id 不是在服务器端生成的(据我所知,虽然我承认我没有尝试 Roatin 的解决方案,因为在我看到他的答案之前我已经想到了我的解决方案 + 我的似乎更简单,因为我已经在做一堆东​​西在 JavaScript 中的客户端),我环顾四周看看我已经得到了什么,并意识到这var rcbID = sender.get_id();已经给我带来了与我已经在寻找的东西非常相似的价值(只是它不是说 SunLocale,而是说 SunActivity )。

所以我想,嘿,我可以 substring() 删除 rcbID 中的所有内容,然后将“Locale”附加到它,然后对其运行 $find() 命令以获得正确的 RadComboBox。事实证明它有效。无论如何,尽管我确实感谢你们调查我的问题,尽管我最终找到了自己的解决方案。:-)

于 2010-07-23T13:21:39.017 回答