我的页面上有一个转发器,第1页,它显示每个项目中的产品详细信息。每个项目都有“选择此项”按钮,我发布到第2页。我想显示第2页上选择的产品。听起来很简单但几个小时都无法解决。任何的想法?我在第1页上的itemtemplate看起来像这样:
<ItemTemplate>
<ul>
<li><%#Eval("Product_Name") %></li>
<li><%#Eval("Product_Code") %></li>
...
<li>
<asp:Button ID="btnSubmit" runat="server" Text="Select this" PostBackUrl="page2"/></li>
</ul>
</ItemTemplate>
我只想通过Request.Form获取按钮编号的解决方案,但这会让我再添加一个查询来获取第n个产品。谢谢你的帮助
答案 0 :(得分:1)
不确定它是否适用于您的情况,但通常使用ItemCommand模式解决此问题:
首先订阅转发器的ItemCommand
事件(与订阅ItemCreated
/ ItemDataBound
相同)
yourRepeater.ItemCommand += yourRepeater_ItemCommandHandler;
处理程序是:
protected void ItemCommandHandler(object source, RepeaterCommandEventArgs e)
{
if(e.CommandName=="SelectThis")
{
var productCode = e.CommandArgument;
//...
}
}
然后,在你的标记中:
<asp:Button ID="btnSubmit" runat="server" Text="Select this" CommandName="SelectThis" CommandArgument='<%#Eval("Product_Code")%>' />
在发布到其他页面时从未尝试过此模式。希望这无论如何都会有所帮助。
答案 1 :(得分:0)
是否需要PostBack
?如果没有,我建议你用这种方法解决这个问题:
将asp:Button
替换为asp:HyperLink
,并在QueryString
中传递productId或productCode。这是一个例子:
<ItemTemplate>
<ul>
.
.
<li>
<asp:HyperLink ID="hlSelectProduct" runat="server" Text="Select this" NavigateUrl='<%# string.Format("~/Page2.aspx?Product_Code={0}", Eval("Product_Code")) %>' />
</li>
</ul>
</ItemTemplate>
和page2.aspx只使用Product_Code
从数据库中检索产品答案 2 :(得分:0)
我无法使用查询字符串,因为我不希望所有内容都显示在网址上。我尝试了ItemCommand,但它需要页面发布自己。出于同样的原因,我也无法使用onclientclick。
但是,我设法通过使用Jquery来解决问题。我在转发器之外创建了一个隐藏字段,并创建了一个jquery函数来处理按钮点击。我将产品id值放在每个按钮的rel属性中,并通过该函数将其分配给hiddentext的val。 Jquery函数在页面发布之前确实有效,因为我的按钮都有postbackurl地址,所以它没有问题。