2010-09-30 3 views
8

моя кнопка соединения -Как связать функцию javascript с событием OnClientClick с Eval?

<asp:LinkButton runat="server" ID="lbtnEdit" Text="edit" OnClientClick="javascript:msgDisp('<%# Eval(LocationId).toString() %>')" /> 

и Javascript msgDisp

это-
<script type="text/javascript" language="javascript"> 
    function msgDisp(lid) {    
     alert(lid); 
    } 
</script> 

но не giiving LocationId в поп, но вся строка <% # ......%> comin в всплывающем сообщении. Как передать значения Eval в javascript.

+0

Является ли кнопка ссылки в режиме управления данными? Если нет, вам нужно вызвать 'lbtnEdit.DataBind()'. –

ответ

12

Вы можете построить все содержимое OnClientClick в виде строки в скобках кода, и оно будет выводиться так, как вы ожидаете.

<asp:LinkButton runat="server" ID="lbtnEdit" Text="edit" 
    OnClientClick='<%# "msgDisp(" + Eval("LocationId") + ");" %>' /> 

Это предполагает, что LocationId является действительным number- нет кавычки, чтобы обернуть свою ценность, когда она делает, поэтому вывод что-то вроде msgDisp(hello); собирается ломаться. Я не знаю, как обращаться с этим таким образом, поэтому, если вам нужно это сделать, я рекомендую установить серверную сторону OnClientClick во время события ItemDataBound. Вот что он хотел бы, если родительский элемент - это элемент управления Repeater.

protected void notesRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    MyClass item = (MyClass)e.Item.DataItem; 
    LinkButton lbtnEdit = (LinkButton)e.Item.FindControl("lbtnEdit"); 
    lbtnEdit.OnClientClick = string.Format("msgDisp('{0}');", item.LocationId); 
} 
+0

, если вам нужны котировки вокруг него, как в 'msgDisp ('hello');' тогда вы можете использовать объект HTML, например: 'OnClientClick = '<% #" msgDisp (' "+ Eval (" LocationId ") +" ') ;» %> ''. –

2

Если вы получаете ваши выражения привязки метки (<% # ...%>), оказываемые в разметке, это означает, что ваш LinkButton не инициализируется в связывающем контейнере. Контейнер привязки может быть, как показано на примере @lincolnk, элементом Repeater или GridView, ячейкой календаря и т. Д. Кроме того, вам не нужно префикс вашего вызова функции с помощью «javascript:». Значение свойства OnClientClick отображается как обработчик события якоря onclick.

2

Посмотрел всюду в сети. Все говорят, что используют CodeBehind. См. Мое решение, которое работает, даже когда мой datavalue имеет одну цитату в нем, например, O'Neal. Это не сработает, если элемент данных содержит двойные кавычки. Но работает для того, что мне нужно, чтобы делать то, что проходило под именем человека. Обратите внимание на обратную косую черту внутри вызова оповещения.

OnClientClick="<%#string.Format(&quot;alert(\&quot;{0}\&quot;); return false; &quot;, Eval(&quot;NAME&quot;))%>"** 
0

Я хочу поблагодарить Линкольнк за его ответ. В настоящее время я помогаю построить новую социальную сеть для googam.com. Я искал несколько дней для решения для просмотра профиля пользователя в datalist в всплывающем диалоговом окне jquery modal. Установка ссылки OnClientClick в событии ItemDataBound решила проблему передачи идентификатора пользователя функции JQuery, чтобы открыть пользовательский элемент управления acsx во всплывающем окне.

jQuery(document).ready(function() { 
     var mydiv = jQuery("#mydialog").dialog({ 
      autoOpen: false, 
      resizable: false, 
      modal: true, 
      width: '500', 
      height: '400' 
     }).css("font-size", "0.8em"); 
    }); 

    function ShowPopup(uid) { 
     var mydiv = jQuery("#mydialog") 
     //alert(uid) 
     // Load the content using AJAX 
     mydiv.load('Profile.aspx?id=' + uid); 
     // Open the dialog   
     mydiv.dialog('open'); 
    } 

//////////////

Protected Sub DataList1_ItemDataBound(ByVal sender As Object, ByVal e As DataListItemEventArgs) 
    If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then 
     Dim imageControl = TryCast(e.Item.FindControl("Image1"), Image) 
     Dim Uid As String = imageControl.ImageUrl 

     Dim ProfileBtn As LinkButton = TryCast(e.Item.FindControl("ProfileButton"), LinkButton) 
     ProfileBtn.OnClientClick = String.Format("ShowPopup('{0}');return false;", Uid) 

    End If 
End Sub 
1

Вы можете сделать как OnClick =»<% # "msgDisp (" + Eval ("LocationId") + "); %> '