将查询字符串参数添加到GridView的ItemTemplate

7

我有一个带有超链接的网格视图,第一列中包含。当用户点击该超链接时,将被重定向到Vendor.aspx。现在,我需要将消费者ID(所点击行的)作为查询字符串传递给Vendor.aspx。

如何实现最佳方法?是否有一种只使用标记代码即可处理它的方法?

  <asp:GridView ID="grdConsumers" runat="server" AutoGenerateColumns="False" 
                EnableViewState="True" >
                <Columns>

                   <asp:TemplateField HeaderText="ConsumerID" SortExpression="ConsumerID" >
                    <ItemTemplate>
                        <asp:HyperLink ID="lnkConsumerID" href="Vendor.aspx" runat="server"><%# Eval("ConsumerID")%></asp:HyperLink>
                    </ItemTemplate>
                    </asp:TemplateField>



                    <asp:BoundField HeaderText="Status" DataField="Status" SortExpression="Status"></asp:BoundField>
                </Columns>
            </asp:GridView>

阅读材料:

  1. 如何在用户控件(ASCX)内动态设置Gridview DataNavigateUrlFormatString

  2. 如何在DataNavigateUrlFormatString中添加"&Source"

  3. 如何使用JavaScript选中GridView中的行

  4. 当绑定的值包含冒号时,如何绑定GridView HyperLinkField的URL?

  5. 从数据源绑定asp.net gridview DataNavigateUrlFormatString

3个回答

2
尝试使用DataNavigateUrlFormatString
<ItemTemplate>
    <asp:HyperLinkField DataNavigateUrlFields="ConsumerID" DataTextField="ConsumerID" DataNavigateUrlFormatString="Vendor.aspx?id={0}" />
</ItemTemplate>

...这样可以避免您使用Eval()时在将其放入href时产生的单/双引号问题。

如果您愿意,可以替换DataTextField - 我只是将ConsumerID放在那里以保持与您的示例一致。


谢谢。我使用了类似于BoundField的HyperLinkField,它起作用了。 - LCJ

1
请在 .aspx 文件中像这样重写您在 gridview 中的超链接:
<asp:HyperLink ID="lnkConsumerID" runat="server"  Text='<%# Eval("ConsumerID")%>' />

然后在代码后台创建一个RowDataBound事件处理程序:

    protected void grdConsumers_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType != DataControlRowType.DataRow) return;
    var hlnkhlnk = (HyperLink)e.Row.FindControl("lnkConsumerID");
    if (hlnkhlnk != null)
    {
        hlnkhlnk.NavigateUrl = "Vendor.aspx" + "?Consumer   ID=" + hlnkhlnk.Text;
    }
}

希望对你有所帮助。


0

您可以使用 Gridview Item Data Bound Event 来实现同样的功能。

    protected void grdConsumers_ItemDataBound(object sender,DataGridItemEventArgs e)
    {
        if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            // Get your consumerId here     
            ((HyperLink)e.Item.FindControl("Edit")).NavigateUrl = "Vendor.aspx?id=" + consumerId
        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接