在RadGrid编辑表单中获取控件的ClientID

时间:2010-08-16 13:52:32

标签: javascript asp.net telerik radgrid

我有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>

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

是否有另一种方法可以将ID传递给Javascript函数?

3 个答案:

答案 0 :(得分:1)

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

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

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

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

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

这一切都按预期工作。

答案 1 :(得分:0)

尝试:

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

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

答案 2 :(得分:0)

表单上的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中的全局变量。你可以用它来操纵文本框。唯一的问题是,如果你想操纵所有控件,你需要对表格上的每个控件都这样的事件=(