【问题标题】:javascript onclick to select item with asp.net ListView controljavascript onclick 使用 asp.net ListView 控件选择项目
【发布时间】:2011-04-14 06:57:40
【问题描述】:

我正在尝试实现一个 onclick 事件来选择 asp:ListViewControl 中的一个项目。

 <ItemTemplate>
        <tr runat="server" id="MemberRow" onclick='<%#ClientScript.GetPostBackClientHyperlink(LvMembers, string.Format("Select${0}", Container.DataItemIndex)) %>'>
            <td>
                <asp:Literal runat="server" ID="LtlMembershipNumber" Text='<%#Eval("MembershipNo") %>' />
            </td>
            <td>
                <asp:Literal runat="server" ID="LtlName" Text='<%#Eval("FullName") %>' />
            </td>
            <td>
                <asp:Literal runat="server" ID="LtlCompany" Text='<%#Eval("Company") %>' />
            </td>
            <td>
                <asp:Literal runat="server" ID="LtlNotes" Text='<%#Eval("Notes") %>' />
            </td>
            <td runat="server">
                <asp:Literal runat="server" ID="LtlMobile" Text='<%#Eval("MobilePhone") %>' /><asp:LinkButton
                    runat="server" ID="lnl1" CommandName="Select" Text="test" />
            </td>
        </tr>
    </ItemTemplate>

页面按预期加载和绑定。它还输出我期望的 HTML。

<tr id="ContentPlaceHolder1_LvMembers_MemberRow_1" onclick="javascript:__doPostBack('ctl00$ContentPlaceHolder1$LvMembers','Select$1')">
        <td>
                10000018
            </td>
        <td>
                Axel Rose
            </td>
        <td>

            </td>
        <td>

            </td>
        <td>
                <a id="ContentPlaceHolder1_LvMembers_lnl1_1" href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$LvMembers$ctrl1$lnl1','')">test</a>
            </td>
    </tr>

但是 onclick 不会触发 ListView.Command 或 ListView.SelectedIndexChanging 事件?如果我添加一个带有 CommandName="Select" 的按钮,它会按预期工作吗? POST数据是一样的!

{__EVENTTARGET=ctl00%24ContentPlaceHolder1%24LvMembers&__EVENTARGUMENT=Select%245&__VIEWSTATE=...}

【问题讨论】:

    标签: javascript asp.net listview onclick


    【解决方案1】:

    我自己回答了这个问题。 ListView 类没有实现 IPostBackEventHandler 接口。

    这意味着它没有 RaisePostBackEvents 方法,也不接受 EventTarget。

    我已经重载了它来实现这个接口。

     public class ListViewEvent : ListView, IPostBackEventHandler
        {
            public void RaisePostBackEvent(string eventArgument)
            {
                if (!eventArgument.Contains("$"))
                    return;
    
                string[] splitEventArgument = eventArgument.Split('$');
    
                switch (splitEventArgument[0])
                {
                    case "Select":
                        {
                            SelectItem(Convert.ToInt32(splitEventArgument[1]));
                            break;
                        }
                    default:
                        {
                            break;
    
                        }
                }
            }
        }
    

    【讨论】:

    • 这正是我想要的。我该如何实现?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多