【发布时间】:2009-09-28 21:39:28
【问题描述】:
我使用中继器控件在我的网站中显示数据。我在 Repeater Control 中使用 HyperLink 来显示数据库中我的表的一个字段。
当您单击时,我希望该链接转到另一个页面并使用 QueryString 向该 [page] 发送一个字符串。我不知道我是怎么做的 - 你能解释一下怎么做吗?
我在 ASP.net 中使用 Linq。
【问题讨论】:
标签: asp.net query-string repeater
我使用中继器控件在我的网站中显示数据。我在 Repeater Control 中使用 HyperLink 来显示数据库中我的表的一个字段。
当您单击时,我希望该链接转到另一个页面并使用 QueryString 向该 [page] 发送一个字符串。我不知道我是怎么做的 - 你能解释一下怎么做吗?
我在 ASP.net 中使用 Linq。
【问题讨论】:
标签: asp.net query-string repeater
<asp:HyperLink ID="HyperLink3" NavigateUrl='<%#Eval("ID_Message","~/ADMIN/Reply.aspx?ID={0}") %>' runat="server">OK</asp:HyperLink>
【讨论】:
让我们从 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;
}
【讨论】:
string 转换为string。 Request.QueryString 集合的索引器已经返回了一个字符串,所以不需要再次强制转换。
这里有一个来自Repeater 中的ItemTemplate 的示例,可以为您提供一个想法。经纬度来自数据库
<a target="_blank" class="newwindow" href="http://maps.google.com/maps?saddr=<%=addressTextBox.Text%>&daddr=<%#Eval("Latitude")%>,<%#Eval("Longitude") %>">
【讨论】:
由于每个人都发布了嵌入在 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,因为它会导致大量混乱。
【讨论】:
使用 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();
【讨论】: