在Listview行上重定向单击

时间:2014-02-03 01:38:30

标签: c# asp.net listview click row

我有Listview,其中一列名为id_Number。 如果用户点击其中一行,是否可以重定向到另一个页面? 例如,如果id_Number为4,则应将页面重定向到~/Page.aspx?id=4

代码:

<asp:ListView ID="ListView1" runat="server" 
    DataKeyNames="id_Number" >
    <EmptyDataTemplate>
        <table id="Table1" runat="server" style="">
            <tr>
                <td>
                    No data was returned.</td>
            </tr>
        </table>
    </EmptyDataTemplate>               
    <ItemTemplate>
        <tr style="font-family: Arial; color: #FFFFFF" onMouseOver="this.bgColor='#219DD0';" onMouseOut="this.bgColor='#252526';">
            <td>
                <asp:Label ID="Label1" runat="server" Text='<%# Eval("id_Number") %>' />
            </td>
            <td>
                <asp:Label ID="TextLabel" runat="server" Text='<%# Eval("Text") %>' />
            </td>
            <td>
                <asp:Label ID="DateLabel" runat="server" Text='<%# Eval("Date") %>' />
            </td>
        </tr>
    </ItemTemplate>
    <LayoutTemplate>
        <table id="Table2" runat="server">
            <tr id="Tr1" runat="server">
                <td id="Td1" runat="server">
                    <table ID="itemPlaceholderContainer" runat="server" border="0" style="">
                        <tr id="Tr2" runat="server" style="">
                            <th id="Th1" runat="server">
                                Name</th>
                            <th id="Th2" runat="server">
                                Text</th>
                            <th id="Th3" runat="server">
                                Date</th>
                        </tr>
                        <tr ID="itemPlaceholder" runat="server">
                        </tr>
                    </table>
                </td>
            </tr>
        </table>
    </LayoutTemplate> 
</asp:ListView>

1 个答案:

答案 0 :(得分:1)

您可以非常轻松地在ItemTemplate的{​​{1}}中添加HTML链接或JavaScript:

“列”只是HTML列;在ItemTemplate中,您可以访问所有数据,包括id_number,因此您可以在HTML中的任何位置使用它,而不仅仅是在列中。

由于您要整行可点击,我会在HTML表格行ListView元素的onClick事件上使用JavaScript函数。你已经有2个事件(onMouseOver,onMouseOut),其中包含JavaScript,所以这只是一个......

JavaScript重定向使用<TR>,它将在同一窗口中重定向,假设这是您想要的(而不是新窗口等):

window.location.href

需要注意的一点是,对于Page.aspx的路径,您必须使用相对路径。

<ItemTemplate>
    <tr style="font-family: Arial; color: #FFFFFF" 
        onMouseOver="this.bgColor='#219DD0';" 
        onMouseOut="this.bgColor='#252526';"
        onClick="window.location.href = 'some/path/Page.aspx?id=<%# Eval("id_Number") %>';"
        <td>
            <asp:Label ID="Label1" runat="server" Text='<%# Eval("id_Number") %>' />
        </td>
        <td>
            <asp:Label ID="TextLabel" runat="server" Text='<%# Eval("Text") %>' />
        </td>
        <td>
            <asp:Label ID="DateLabel" runat="server" Text='<%# Eval("Date") %>' />
        </td>
    </tr>
</ItemTemplate>

是一个.net路径,它被编译成该页面的完整相对路径。 但是,由于你的ItemTemplate包含HTML,你需要在那里找到Page.aspx的完整(相对)路径。

所以它应该是(只是一个例子):

~/page.aspx?id=

或者你可以使用

/some/path/page.aspx?id=   <-- page.aspx lives on http://www.yoursite.com/some/path/page.aspx
/page.aspx?id=             <-- page.aspx lives on root, http://www.yoursite.com/page.aspx