2

検索結果 (url、説明、タイトル) に読み込まれる DataList があります。ユーザーが検索結果をクリックした URL を知る必要があります。私はlinkbuttonを使ってこれを行います。しかし、LinkBut​​ton コントロールで PostBackUrl プロパティを使用している場合、OnClick ハンドラーは呼び出すことができません。

//Default.aspx
    <asp:Panel ID="panResults" runat="server" Height="236px">
        <p style="text-align: left" align="left"><asp:Label runat="server" ID="lblTotal" Font-Bold="true" /></p>
        <asp:DataList ID="dlstResults" runat="server" CellPadding="4" 
            ForeColor="#333333" Width="100%" OnItemDataBound="DataList_ItemDataBound" >
            <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <SelectedItemStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
            <AlternatingItemStyle BackColor="White" ForeColor="#284775" />
            <ItemStyle BackColor="#F7F6F3" ForeColor="#333333" />
            <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <ItemTemplate>
                <asp:LinkButton ID="lnkResultUrl" runat="server" OnClick="Link_Click" CommandArgument='<%# Eval("Url") %>'
                    PostBackUrl='<%# Eval("Url") %>' Text='<%# Eval("Title") %>' />
                <br />
                <asp:Label ID="lblResultUrl" runat="server" Font-Bold="true"
                    Text='<%# Eval("Url") %>' />
                <br />
                <asp:Label ID="lblResultSummay" runat="server" 
                    Text='<%# Eval("Description") %>' />
            </ItemTemplate>     
        </asp:DataList>   
    </asp:Panel>

//Code-behind
protected void Link_Click(object sender, EventArgs e)
{
    LinkButton btn = (LinkButton)(sender);       
    string myValue = btn.CommandArgument;
}
4

2 に答える 2

1

コード ビハインドで Response.Redirect を使用し、リンク ボタンから PostBackUrl を削除できます。

<asp:DataList ID="dlstResults" runat="server" CellPadding="4" OnItemCommand="dlstResults_ItemCommand"
    ForeColor="#333333" Width="100%" OnItemDataBound="dlstResults_ItemDataBound">
    <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
    <SelectedItemStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
    <AlternatingItemStyle BackColor="White" ForeColor="#284775" />
    <ItemStyle BackColor="#F7F6F3" ForeColor="#333333" />
    <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
    <ItemTemplate>
        <asp:LinkButton ID="lnkResultUrl" runat="server" CommandArgument='<%# Eval("Url") %>'
            CommandName="SomeName" Text='<%# Eval("Title") %>' />
        <br />
        <asp:Label ID="lblResultUrl" runat="server" Font-Bold="true" Text='<%# Eval("Url") %>' />
        <br />
        <asp:Label ID="lblResultSummay" runat="server" Text="desc" />
    </ItemTemplate>
</asp:DataList>

および分離コード

protected void dlstResults_ItemCommand(Object sender, DataListCommandEventArgs e)
{
    if (e.CommandName == "SomeName")
    {
        string url = e.CommandArgument.ToString();
        //do some stuff with url before you redirect
        Response.Redirect("//" + url);
    }
}
于 2013-05-17T17:09:42.883 に答える