Вызов Javascript из Button внутри ASP Repeater? - PullRequest
0 голосов
/ 28 августа 2011

Я использую ASP Repeater. В <ItemTemplate> и <AlternatingItemTemplate> есть, помимо прочего, 3 кнопки HTML (<input type="button"...), которые при нажатии делают разные вызовы javascript / jquery. Это работает нормально.

Теперь я хочу динамически показать / скрыть эти кнопки на основе boolean, привязанного к моему репитеру. Я знаю, если бы я использовал кнопку ASP, я мог бы просто использовать что-то вроде:

Visible='<%# Eval(bMyBoolean) %>'

Я попытался переключить мои кнопки HTML на кнопки ASP, но потом я не смог заставить вызовы javascript работать правильно. Я знаю, что вы можете подключить вызовы Javascript в коде для каждой кнопки (в событии Repeater.ItemDataBound), но я не уверен, как это сделать в коде моего сценария. Вот пример одной из моих кнопок HTML:

<input type="button" id="myButton" value="Test" onclick="MyJavascriptFunction(this,'<%# CType(Container.DataItem, myClassObject).FirstName%>');" />

В приведенном выше примере я передаю значение FirstName (которое является свойством объекта класса, который я привязываю к повторителю) в мою функцию Javascript.

Мне кажется, что если я использую ASP Repeater, то имеет смысл использовать кнопки ASP, но я не знаю, действительно ли это имеет значение?

Итак, мой вопрос : Как я могу динамически показать / скрыть кнопку HTML внутри ASP-повторителя на основе логического значения, связанного с повторителем? Или, если это плохая практика, как я могу сделать вызов javascript с помощью кнопки ASP, как, например, вызов выше (ссылка на значение из повторителя)?

Заранее спасибо за любую помощь / совет!

1 Ответ

1 голос
/ 28 августа 2011

вы можете динамически выводить информацию о стиле на основе вашего логического значения. Учтите это:

<itemTemplate>
    <input type='button' style='<%# getVisbility(Eval("MyBoolValue")) %>' 
           value='click me' />
</itemTemplate>

Тогда в вашем коде вы получите:

protected function getVisibility(isVisible as boolean) as string 
   if isVisible then
     return "display:inline; "
   else
     return "display:none;"
   end if 
end function 

Теперь, если вы хотите выполнить вызов JavaScript из элемента управления asp.net, у вас также есть опции:

Самый простой - но ни в коем случае не лучший вариант - встроить JS:

<itemTemplate>
   <asp:button runat="server" onclientClick="return confirm('click to submit');" 
               text="Click!" />
</itemTemplate>

есть более сложные опции с использованием JQuery, которые позволят вам динамически захватывать событие щелчка и определять точную строку репитера, для которого вы выбираете. Одним из примеров этого является:

<itemTemplate>
   <asp:button cssclass ='clickMe' runat="server" rel='<%# Eval("MyCol")%>' 
               text="Click!" />
</itemTemplate>

Тогда код jquery:

$(".clickMe").click(function(){
  var myVal = $(this).attr("rel");
})
...