Получение идентификатора клиента элемента управления в форме редактирования RadGrid
-
28-09-2019 - |
Вопрос
У меня есть Telerik RadGrid с пользовательской формой редактирования.В моей форме редактирования есть RadDatePicker, к которому я добавил пользовательский шаблон нижнего колонтитула, содержащий кнопку "Сегодня".
В событии OnClick кнопки я вызываю функцию Javascript, которая принимает идентификатор элемента управления для установки выбранной даты.
Однако, поскольку элемент управления находится внутри формы редактирования, для него не создана переменная, и компилятор выдает ошибку, когда я пытаюсь получить идентификатор клиента.
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
в строке, ссылающейся на идентификатор клиента.
Есть ли другой способ получить идентификатор для передачи функции Javascript?
Решение
Я прибегал к обертыванию TELERIK RADGRID с RadajaxPanel, а затем в боковом коде сервера для события Bind I использовал панель Ajax, чтобы установить некоторые переменные JavaScript:
RadAjaxPanel1.ResponseScripts.Add(string.Format("window['ControlNameId'] = '{0}';", ControlName.ClientID));
Затем я добавил обработчик событий на стороне клиента в DatePicker: ClientEvents-OnPopupOpening="AddButtonClickEvent"
Затем страница включает в себя следующий JavaScript, чтобы связать обработчик событий Click с помощью jQuery:
function AddButtonClickEvent(sender, eventArgs) {
var cal = window['ControlNameId'];
$('#Button1').bind('click', function() {
GoToToday(cal);
});
}
И все это работает, как и ожидалось.
Другие советы
Пытаться:
OnClick=<%# "GoToToday('" + ControlName.ClientID + "')" %>
Вы также можете установить обработчик событий в событии Page_Load.
Может быть, поможет событие 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.И вы можете использовать его для манипулирования текстовым полем.Единственная проблема заключается в том, что вам нужно подобное событие для каждого элемента управления в форме, если вы хотите манипулировать всеми элементами управления =(