【问题标题】:Getting ClientID of control in RadGrid edit form在 RadGrid 编辑表单中获取控件的 ClientID
【发布时间】:2010-08-16 13:52:31
【问题描述】:

我有带有自定义编辑表单的 Telerik RadGrid。在我的编辑表单中有一个 RadDatePicker,我在其中添加了一个包含“今天”按钮的自定义页脚模板。

在按钮的 OnClick 事件中,我调用了一个 Javascript 函数,该函数采用控件 ID 来设置所选日期。

但是,由于控件位于编辑表单内,因此没有为其创建变量,并且当我尝试获取客户端 ID 时编译器会抛出错误。

RadDatePicker 声明为:

<telerik:RadDatePicker ID="ControlName" runat="server" SelectedDate='<%# Bind("Field") %>'>
  <Calendar ID="Calendar1" runat="server"> 
    <FooterTemplate> 
      <div style="width: 100%; text-align: center; background-color: Gray;"> 
        <input id="Button1" type="button" value="Today" class="button"
          onclick="GoToToday('<%= ControlName.ClientID %>')" /> 
      </div> 
    </FooterTemplate> 
  </Calendar>
</telerik:RadDatePicker>

我得到的错误是 CS0103: The name 'ControlName' does not exist in the current context 在引用 ClientID 的行上。

还有其他方法可以让 ID 传递给 Javascript 函数吗?

【问题讨论】:

  • 我尝试了完全相同的代码,但没有出现错误。我使用的是 Telerik 2010.1.519.40 的版本

标签: javascript asp.net telerik radgrid


【解决方案1】:

我使用 RadAjaxPanel 包装 Telerik RadGrid,然后在绑定事件的服务器端代码中使用 Ajax 面板设置一些 Javascript 变量:

RadAjaxPanel1.ResponseScripts.Add(string.Format("window['ControlNameId'] = '{0}';", ControlName.ClientID));

然后我向 DatePicker 添加了一个客户端事件处理程序:ClientEvents-OnPopupOpening="AddButtonClickEvent"

然后页面包含以下 Javascript 以使用 jQuery 绑定点击事件处理程序:

    function AddButtonClickEvent(sender, eventArgs) {
      var cal = window['ControlNameId'];
      $('#Button1').bind('click', function() {
        GoToToday(cal);
      });
    }

这一切都按预期工作。

【讨论】:

    【解决方案2】:

    试试:

    OnClick=<%# "GoToToday('" + ControlName.ClientID + "')" %>
    

    您还可以在 page_load 事件中设置事件处理程序。

    【讨论】:

    • 该代码给出了与加载页面时相同的错误。我认为当网格数据绑定编辑表单时需要添加事件处理程序,因为直到那时控件才存在。
    • 是的,恐怕你是对的。很痛苦,但我不是第一次在第三方或模板控件上看到这种情况
    • 终于有时间在项目计划上再次查看这个。不幸的是,RadDatePicker 日历并没有通过其控件列表在页脚中公开任何内容,因此在代码隐藏中这样做是不行的。
    【解决方案3】:

    也许表单上的控件的 ClientEvents-OnLoad 事件会有所帮助?它不是很漂亮,但似乎可以工作。

    首先在页面上制作脚本

    <script type="text/javascript">
        var textBoxFromFormClientObject;
    
        function onTextBoxLoad(sender) {
           textBoxFromFormClientObject = sender;
        }
    </script>
    

    然后在 aspx 中,用于控制您需要在客户端获取的编辑表单, 添加这样的事件

    <rad:RadTextBox ID="txSomeTextBoxe" runat="server"
     ClientEvents-OnLoad="onTextBoxLoad"/>
    

    因此,当您在网格上按下编辑或插入按钮时,将显示表单 - 将设置 javascript 中的全局变量。您可以使用它来操作文本框。唯一的问题是,如果要操作所有控件,则表单上的每个控件都需要这样的事件 =(

    【讨论】:

      猜你喜欢
      • 2016-12-16
      • 2015-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-13
      • 1970-01-01
      相关资源
      最近更新 更多