【问题标题】:Send string with QueryString in Repeater Control in ASP.net在 ASP.net 的中继器控件中使用 QueryString 发送字符串
【发布时间】:2009-09-28 21:39:28
【问题描述】:

我使用中继器控件在我的网站中显示数据。我在 Repeater Control 中使用 HyperLink 来显示数据库中我的表的一个字段。

当您单击时,我希望该链接转到另一个页面并使用 QueryString 向该 [page] 发送一个字符串。我不知道我是怎么做的 - 你能解释一下怎么做吗?

我在 ASP.net 中使用 Linq。

【问题讨论】:

    标签: asp.net query-string repeater


    【解决方案1】:
    <asp:HyperLink ID="HyperLink3" NavigateUrl='<%#Eval("ID_Message","~/ADMIN/Reply.aspx?ID={0}") %>' runat="server">OK</asp:HyperLink>
    

    【讨论】:

      【解决方案2】:

      让我们从 QueryString 的格式开始。 QueryString 如下所示:

      http://www.mysite.com/somepage.aspx?id=? 
      

      对!

      当然你可以使用“&”符号在QueryString中传递多个参数,如下所示:

      http://www.mysite.com/somepage.aspx?id=?&foo=?  
      

      现在,您需要在Repeater 控件中执行相同的操作并使用数据库中的值。

      <asp:Repeater>
      
      <ItemTemplate>
      <a href="http://www.mysite.com/somepage.aspx?id=<%# Eval("Id") #>"><Eval("Title")</a>
      </ItemTemplate>
      </asp:Repeater>
      

      Eval("Id") 是来自数据源的属性,可以是 DataSet、DataTable、Entity 类等。

      绑定Repeater控件时会调用%# Eval("Id") #>。使用Repeater.DataBind() 方法绑定Repeater 控件。

      获取其他页面的id:

      if(Request.QueryString["id"] != null) 
      {
         string id = Request.QueryString["id"] as String; 
      }
      

      【讨论】:

      • 我会改变 ?id=?类似于 ?id=0,因为使用 ?作为占位符可能会使不知道查询字符串如何工作的人感到困惑。
      • 当我发送这个 ID 时,我如何在那个页面上得到它
      • 1 用于将string 转换为stringRequest.QueryString 集合的索引器已经返回了一个字符串,所以不需要再次强制转换。
      【解决方案3】:

      这里有一个来自Repeater 中的ItemTemplate 的示例,可以为您提供一个想法。经纬度来自数据库

      <a target="_blank" class="newwindow" href="http://maps.google.com/maps?saddr=<%=addressTextBox.Text%>&daddr=<%#Eval("Latitude")%>,<%#Eval("Longitude") %>">
      

      【讨论】:

        【解决方案4】:

        由于每个人都发布了嵌入在 aspx 页面中的所有评估的代码,因此我将发布一个包含后面代码中所需的所有代码的代码(我更喜欢所有这些代码)。

        首先在中继器中,您需要一个控件:

        <asp:Repeater>
            <ItemTemplate>
                <asp:HyperLink ID="hrefLink"
                    href="http://www.mysite.com/somepage.aspx?id={0}&more={1}"
                    OnDataBinding="hrefLink_DataBinding">
                </asp:HyperLink>
            </ItemTemplate>
        </asp:Repeater>
        

        然后在你后面的代码中实现数据绑定以填写链接详细信息:

        protected void hrefLink_DataBinding(object sender, System.EventArgs e)
        {
            HyperLink link = (HyperLink)(sender);
            // Fill in your links details
            link.NavigateUrl = string.Format(link.NavigateUrl,
                Eval("ID").ToString(), Eval("More").ToString());
            link.Text = Eval("LinkTitle").ToString();        
        }
        

        这样做的好处是您可以在需要时轻松添加更多逻辑,而不会用大量代码使您的 aspx 页面混乱。与内联相比,我更喜欢这种方法,但它们都是有效的解决方案,而且更像是一种偏好。

        如果您不想预定义链接的去向,您可以更改上述数据绑定代码以将整个 NavigateUrl 重写为您想要的任何内容。因此,根据一些评估值,您可以重定向到不同的页面。这是最可定制的解决方案。

        附注:如果不需要,请确保关闭中继器上的 ViewState,因为它会导致大量混乱。

        【讨论】:

          【解决方案5】:

          使用 Eval 方法将字段评估到呈现的页面中。例如,您有一个 Products 表,并且您想要一个将产品 id 传递给 showproduct.aspx 的链接。检查下面的示例:

          <a href='showproduct.aspx?productid=<%#Eval("ProductID")%>'>View Details</a>
          

          在 showproduct.aspx 使用 Page.Request.QueryString 集合来获取产品:

          string productId = Page.Request.QueryString["productid"].ToString();
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-08-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-04-24
            相关资源
            最近更新 更多