Пользовательский контроль с клиентским API - PullRequest
0 голосов
/ 28 февраля 2011

Может быть, я выбрал совершенно неуместный / плохой пример. У меня есть пользовательский элемент управления, который содержит кучу динамически созданных Telerik RadGrids. Мой пользовательский элемент управления добавлен к паре Telerik RadPageViews, которые являются частью RadMultiPage, который используется вместе с RadTabStrip. Что мне нужно сделать, так это вызвать функцию Javascript в моем пользовательском контроле, чтобы обновлять его отображение всякий раз, когда выбран родительский RadPageView. Итак, в основном у меня есть следующий код Javascript:

function OnClientTabSelected(sender, args)
{
    // Get the MyControl that is on this tab
    var myControl = $find("whatever");

    // Call a method that updates the display
    myControl.doSomething();
}

Спасибо,

David

Ответы [ 3 ]

3 голосов
/ 01 августа 2011

Вы можете добавить div-обертку в свой пользовательский элемент управления, а затем расширить этот div с помощью jQuery, чтобы добавить нужные методы и свойства.Хитрость заключается в том, чтобы установить id div = '<% = this.ID%>' - таким образом, div имеет тот же идентификатор, что и пользовательский элемент управления (что хорошо, потому что пользовательский элемент управления фактически ничего не отображает - только его содержимое).

Затем, вернувшись на страницу с содержанием, вы можете просто сослаться на идентификатор своего UserControl, используя $ get («что угодно») - и вы фактически выберете свой расширенный элемент div, который будет иметь все ваши методы и свойствана нем.

Хорошая особенность этого подхода заключается в том, что все ваши методы и свойства аккуратно ограничены и ничего не находится в глобальном пространстве имен.

У меня есть полное демонстрационное решение и подробности здесь, еслиВы хотите больше информации: http://programmerramblings.blogspot.com/2011/07/clientside-api-for-aspnet-user-controls.html

2 голосов
/ 28 февраля 2011

Просто вызовите метод javascript в кнопке ввода, если вы уверены в названии этой функции.

<input type="button" value="test" onclick="doSomething()" />

Если вы поместите любой код JavaScript в элемент управления, который будет показан на странице, ион будет доступен для вызова при условии, что они оба в одной форме.

например, ваш код будет выглядеть так, если вы заглянете в источник этой страницы.

<script type="text/javascript">    
    function doSomething()
    {
      alert(new Date());
    }
</script>

<div>
  <span id="MyControl1_Label1">Dummy label</span>
</div>
<hr />
<input type="button" value="test" onclick="doSomething()" />

Редактировать : На мой взгляд, это не очень хороший способ доступа к этим методам.Когда вы помещаете некоторый код javascript в элемент управления, его следует использовать только в этом элементе управления (Правило как таковое отсутствует, это просто предложение по дизайну).Если вы пытаетесь получить доступ к коду javascript элемента управления из-за пределов этого элемента управления, вам необходимо вернуться к своему дизайну.

Если вы можете дать нам более подробную информацию о том, почему вы хотите получить доступ к этому методу, мы можем предложитьнекоторый лучший способ сделать это.

Обновление : (Поскольку вы изменили свой вопрос): Немного сложно ответить на этот вопрос, поскольку у меня нет опыта работы с элементами управления Rad.Я предполагаю, что должна быть какая-то функция, которая поможет вам обновлять элементы управления на этой странице без использования javascript, может быть, взглянуть на клиентский API, предоставленный для Rad.помочь тебе.

0 голосов
/ 28 февраля 2011

Вы должны сделать метод управления общедоступным

public void doSomething

и позвоните по этому адресу со страницы

myControl1.doSomething();
...