【问题标题】:Adding Querystring Parameter to GridView ItemTemplate将查询字符串参数添加到 GridView ItemTemplate
【发布时间】:2012-05-31 22:16:31
【问题描述】:

我在第一列有一个带有超链接的网格视图。单击超链接后,用户将被重定向到 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. Set Gridview DataNavigateUrlFormatString Dynamically inside User Control(ASCX)

  2. How do I add "&Source" to DataNavigateUrlFormatString?

  3. Select row in GridView with JavaScript

  4. How to bind the URL of a GridView HyperLinkField when the bound value contains a colon?

  5. asp.net gridview DataNavigateUrlFormatString from DataSource

【问题讨论】:

    标签: c# javascript asp.net .net


    【解决方案1】:

    尝试使用DataNavigateUrlFormatString

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

    ...它将Eval() 和单引号/双引号问题放在href 中时,可以省去你的麻烦。

    您可以根据需要替换 DataTextField - 我只是将 ConsumerID 放在那里以与您的示例保持一致。

    【讨论】:

    • 谢谢。我使用了类似于 BoundField 的 HyperLinkField 并且它有效。
    【解决方案2】:

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

    希望对你有帮助。

    【讨论】:

      【解决方案3】:

      你也可以使用Grid view 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
              }
          }
      

      【讨论】:

        猜你喜欢
        • 2011-02-11
        • 1970-01-01
        • 2014-06-15
        • 1970-01-01
        • 2015-05-20
        • 2019-09-20
        • 1970-01-01
        • 1970-01-01
        • 2018-05-07
        相关资源
        最近更新 更多