Получение ClientID элемента управления в форме редактирования RadGrid - PullRequest
2 голосов
/ 16 августа 2010

У меня есть 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 в строке, ссылающейся на ClientID.

Есть ли другой способ получить идентификатор для передачи в функцию Javascript?

Ответы [ 3 ]

1 голос
/ 06 октября 2010

Я прибег к обертке Telerik RadGrid с RadAjaxPanel, а затем в коде на стороне сервера для события связывания. Я использовал панель 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);
      });
    }

И все работает как положено.

0 голосов
/ 26 августа 2010

Может быть, событие ClientEvents-OnLoad элементов управления в форме поможет? Это не очень красиво, но, кажется, работает.

Первый скрипт на странице

<script type="text/javascript">
    var textBoxFromFormClientObject;

    function onTextBoxLoad(sender) {
       textBoxFromFormClientObject = sender;
    }
</script>

Затем в aspx, для контроля над формой редактирования, которую нужно получить на клиенте, добавить событие как это

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

Итак, когда вы нажимаете кнопку edit или вставляете кнопку в сетку, и отображается форма - будет установлена ​​глобальная переменная в javascript. И вы можете использовать его для управления текстовым полем. Единственная проблема в том, что вам нужно подобное событие для каждого элемента управления в форме, если вы хотите манипулировать всеми элементами управления = (

0 голосов
/ 16 августа 2010

Попробуйте:

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

Вы также можете установить обработчик события в событии page_load.

...