转发器内的按钮

时间:2013-11-13 09:56:50

标签: asp.net post submit repeater

我的页面上有一个转发器,第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个产品。谢谢你的帮助

3 个答案:

答案 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地址,所以它没有问题。