运行代码隐藏的表行onclick事件

时间:2011-03-24 12:30:58

标签: asp.net javascript-events code-behind

我继承了一个设计糟糕的ASP.NET项目;在一个部分中,标签用标签包装以允许“单击行以查看信息”功能。代码是:

<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 个答案:

答案 0 :(得分:1)

使用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>

答案 1 :(得分:0)

你可以使你的页面(或控件,如果它在控件内)实现IPostBackEventHandler接口并使用ClientScriptManager.GetPostBackEventReference方法(使用Page.ClientScript propery来获取对ClientScriptManager的引用)来获取一个js-method-call-string,它将回发到你的页面。作为GetPostBackEventReference方法的控件参数,请使用您的页面。 然后将tr的onclick属性设置为js-method-call-string。


实施例

在aspx中:

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

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

在codebehind中:

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.";
    }
}

答案 2 :(得分:0)

您只需使用

即可
__doPostBack(eventName, eventArgs); 

此处eventName是代码隐藏事件处理程序