Получение идентификатора клиента элемента управления в форме редактирования RadGrid

StackOverflow https://stackoverflow.com/questions/3493777

Вопрос

У меня есть 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.И вы можете использовать его для манипулирования текстовым полем.Единственная проблема заключается в том, что вам нужно подобное событие для каждого элемента управления в форме, если вы хотите манипулировать всеми элементами управления =(

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top