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