Событие onclick строки таблицы, которое запускает codebehind - PullRequest
2 голосов
/ 24 марта 2011

Я унаследовал проект ASP.NET с плохо разработанным HTML; в одном разделе теги обернуты тегом, чтобы обеспечить возможность «щелкнуть строку, чтобы просмотреть информацию». Код:

<asp:LinkButton ID="ViewArticle" runat="server" CommandName="Navigate" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "id") %>' >
    <tr runat="server" class="list_item">
        <td>some data</td>
        <td>some data</td>
        <td>some data</td>
    </tr>
</asp:LinkButton>

Я бы хотел сделать что-то вроде:

<tr runat="server" class="list_item" onclick="doRowPostbackFunction('<%# DataBinder.Eval(Container.DataItem, "id") %>');">
    <td>some data</td>
    <td>some data</td>
    <td>some data</td>
</tr>

Как мне связать событие JavaScript "onclick" с кодом?

Ответы [ 3 ]

1 голос
/ 24 марта 2011

Используя jQuery, вы можете сделать следующее и вызвать обратную передачу:

<table>
    <tr id="1">
        <td>AAA</td>
        <td>BBB</td>
        <td>CCC</td>
    </tr>
    <tr id="2">
        <td>AAA</td>
        <td>BBB</td>
        <td>CCC</td>
    </tr>
    <tr id="3">
        <td>AAA</td>
        <td>BBB</td>
        <td>CCC</td>
    </tr>
</table>

<script type="text/javascript">
    $(function () {
        $("table tr").click(function (e) {
            //alert the row index that was clicked
            alert($("table tr").index(this));

            //alert the id of the row
            alert($(this).attr("id"));

            //submit the form...
        });
    });
</script>

ИЛИ использовать событие onclick строки ...

<tr onclick="doPostBack('<%#DataBinder.Eval(Container.DataItem, "id") %>')">

... и вызвать функцию JavaScript.

<script type="text/javascript">
    function doPostBack(id)
    {
        //submit form
    }
</script>
0 голосов
/ 16 января 2013

Вы можете просто использовать

__doPostBack(eventName, eventArgs); 

Здесь eventName - обработчик событий с выделенным кодом

0 голосов
/ 24 марта 2011

Вы можете сделать свою страницу (или элемент управления, если он внутри элемента управления) реализующим интерфейс IPostBackEventHandler и использовать ClientScriptManager.GetPostBackEventReference (используя Page.ClientScript чтобы получить ссылку на ClientScriptManager), чтобы получить строку вызова js-method-call, которая будет выполнять обратную передачу на вашу страницу.В качестве управляющего аргумента для метода GetPostBackEventReference используйте вашу страницу.Затем установите для свойства onclick значения tr эту строку вызова js-method.


Пример

В aspx:

<table>
    <tr onclick="<%= _jsPostBackCall %>;">
        <td>a</td>
        <td>b</td>
        <td>c</td>
    </tr>
</table>

<h1>
    <asp:Literal ID="litMessage" runat="server" />
</h1>

В коде позади:

public partial class _Default : System.Web.UI.Page, IPostBackEventHandler
{
    protected String _jsPostBackCall;

    protected void Page_Load(object sender, EventArgs e)
    {
         // "myTr" will be passed as an argument to RaisePostBackEvent method
        _jsPostBackCall = ClientScript.GetPostBackEventReference(this, "myTr");
    }

    public void RaisePostBackEvent(string eventArgument)
    {
        switch (eventArgument)
        {
            case "myTr":
                HandleTrClick();
                break;

            // you can add other controls that need postback processing here

            default:
                throw new ArgumentException();
        }
    }

    private void HandleTrClick()
    {
        litMessage.Text = "Tr clicked.";
    }
}
...