Как связать функцию JavaScript с событием OnClientClick с Eval? - PullRequest
8 голосов
/ 30 сентября 2010

кнопка моей ссылки -

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

и javascript msgDisp is-

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

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

Ответы [ 5 ]

13 голосов
/ 30 сентября 2010

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

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

Это предполагает, что LocationId является допустимым числом - естьнет кавычек, чтобы обернуть ваше значение при рендеринге, поэтому вывод что-то вроде 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);
}
2 голосов
/ 19 января 2013

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

OnClientClick="<%#string.Format(&quot;alert(\&quot;{0}\&quot;); return false; &quot;, Eval(&quot;NAME&quot;))%>"**
2 голосов
/ 30 сентября 2010

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

1 голос
/ 19 января 2015

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

0 голосов
/ 23 августа 2013

Я хочу поблагодарить Линкольнка за его ответ. В настоящее время я помогаю создавать новую социальную сеть для googam.com. В течение нескольких дней я искал решение для просмотра профиля пользователя в списке данных в модальном диалоговом окне jquery. Установка кнопки link 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
...