首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Repeater /I中动态按钮始终得到相同的值

如何在Repeater /I中动态按钮始终得到相同的值
EN

Stack Overflow用户
提问于 2017-08-01 13:29:45
回答 1查看 423关注 0票数 2

在我制作的网站主页上,我将产品从数据库中提取,并附有中继器和高级认证,具体如下:

代码语言:javascript
复制
<div class="col-md-12 grid-gallery overflow-hidden">
    <div class="tab-content">
        <ul class="grid masonry-items">
            <asp:Repeater ID="RptrProductInfo" runat="server" DataSourceID="SqlDtSourceProductInfo">
                <ItemTemplate>
                    <li class="<%#Eval("productcategory") %>">
                        <figure>
                            <div class="gallery-img"><asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click"><img src="<%#Eval("prouctimage") %>" alt="" /></asp:LinkButton></div>
                            <figcaption>
                                <asp:Label ID="LblProductID" runat="server" Text='<%#Eval("productid") %>'></asp:Label>
                                <h3><%#Eval("productname") %></h3>
                                <p>Ürün hakkında detaylı bilgi için tıklayınız.</p>
                            </figcaption>
                        </figure>
                    </li>
                </ItemTemplate>
            </asp:Repeater>
            <asp:SqlDataSource ID="SqlDtSourceProductInfo" runat="server" ConnectionString="<%$ ConnectionStrings:aytasarimConnectionString %>" SelectCommand="SELECT [productid], [productname], [productcategory], [productimage] FROM [product]"></asp:SqlDataSource>
        </ul>
    </div>
</div>

我想做的是:当用户用LinkButton点击产品时,它会将产品的id传递到会话的下一页,并列出相关的产品id和产品的其他属性(产品图像、描述、价格等)。但是点击我点击的产品只会收到第一个产品的id编号1。例如,我点击第三个产品,然后相同的id信息出现在另一个页面(ID 1)。我总是得到ID 1,无论我点击什么。在进行了一些研究之后,我了解到我需要使LinkButton动态化。但我不知道该怎么做。我的主页aspx.cs代码如下:

代码语言:javascript
复制
protected void LinkButton1_Click(object sender, EventArgs e)
{
    foreach (RepeaterItem item in RptrProductInfo.Items)
    {
        Label lblName = (Label)item.FindControl("LblProductID");
        if (lblName != null)
        {
            string mesaj = "";
            DataRow drLogin = function.GetDataRow("SELECT productid FROM product WHERE productid='" + lblName.Text + "'");
            if(drLogin == null)
            {
                mesaj = "<script>alert('Error!');</script>";
                Response.Write(mesaj);
            }
            else
            {
                Session["productid"] = drLogin["productid"].ToString();
                Response.Redirect("product.aspx");
            }
        }
    }
}

我认为真正的问题是代码不知道我点击了哪一个。我该如何解决这个问题?

这是我的product.aspx页面:

代码语言:javascript
复制
<section>
    <div class="container">
        <asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1">
            <ItemTemplate>
                <div class="row">
                    <div class="col-md-6 col-sm-12 zoom-gallery sm-margin-bottom-ten">
                        <a href="<%#Eval("productimage") %>"><img src="<%#Eval("productimage") %>" alt=""/></a>
                    </div>
                    <div class="col-md-5 col-sm-12 col-md-offset-1">
                        <span class="product-name-details text-uppercase font-weight-600 letter-spacing-2 black-text"><%#Eval("productname") %></span>
                        <p class="text-uppercase letter-spacing-2 margin-two">Stok Durumu: <%#Eval("stock") %></p>
                        <div class="separator-line bg-black no-margin-lr margin-five"></div>
                        <p><%#Eval("description") %></p>
                        <span class="price black-text title-small"><%#Eval("price") %></span>
                        <div class="col-md-9 col-sm-9 no-padding margin-five">
                            <a class="highlight-button-dark btn btn-medium button" href="shop-cart.html"><i class="icon-basket"></i> Add To Cart</a>
                        </div>
                    </div>
                </div>
            </ItemTemplate>
        </asp:Repeater>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:aytasarimConnectionString %>" SelectCommand="SELECT [productid], [productname], [stock], [description], [price], [productimage] FROM [product] WHERE ([productid] = @productid)">
        <SelectParameters>
            <asp:SessionParameter Name="productid" SessionField="productid" Type="Int32" />
        </SelectParameters>
        </asp:SqlDataSource>
    </div>
</section>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-01 16:31:16

在我看来,您正在使用大量不必要的代码。从标签中获取产品ID作为字符串,然后执行数据库查询以获得相同的id,同时循环Repeater.

如果我是您,我将使用OnCommand而不是OnClick,并将正确的ID作为CommandArgument发送。

所以在aspx中,将LinkButton更改为

代码语言:javascript
复制
<asp:LinkButton ID="LinkButton1" runat="server" OnCommand="LinkButton1_Command"
   CommandArgument='<%# Eval("productid") %>'>LinkButton</asp:LinkButton>

然后在代码后面

代码语言:javascript
复制
protected void LinkButton1_Command(object sender, CommandEventArgs e)
{
    Session["productid"] = e.CommandArgument.ToString();
    Response.Redirect("product.aspx");
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45439276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档