【问题标题】:Button inside repeater中继器内的按钮
【发布时间】:2013-11-25 20:50:57
【问题描述】:

我的页面 page1 上有一个转发器,它显示每个项目的产品详细信息。每个项目都有“选择这个”按钮,我发布到第 2 页。我想显示在 page2 上选择的产品。听起来很简单,但几个小时都无法解决。任何想法?我在 page1 上的 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 个产品。感谢帮助

【问题讨论】:

    标签: asp.net post submit repeater


    【解决方案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")%>' />
    

    在发布到另一个页面时从未尝试过这种模式。无论如何,希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      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 从数据库中检索产品

      【讨论】:

        【解决方案3】:

        我不能使用查询字符串,因为我不希望所有内容都显示在 url 上。我尝试了 ItemCommand 但它需要页面才能发布。出于同样的原因,我也不能使用 onclientclick。

        但是,我设法通过使用 Jquery 解决了这个问题。我在转发器之外创建了一个隐藏字段,并创建了一个 jquery 函数来处理按钮点击。我将产品 id 值放在每个按钮的 rel 属性中,并通过该函数将其分配给 hiddentext 的 val。 Jquery 函数在页面发布之前确实有效,并且由于我的按钮都有 postbackurl 地址,所以它没有问题。

        【讨论】:

          猜你喜欢
          • 2013-09-19
          • 1970-01-01
          • 2011-11-05
          • 2010-12-23
          • 2011-01-10
          • 2021-09-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多