带有asp按钮的Literal Control

时间:2013-08-02 14:09:43

标签: c# asp.net

我正在使用ASP .NET创建一个电子商务网站,我使用文字控件从数据库中动态地将产品添加到购物页面:

foreach (DataRow dr in dt.Rows)
{
    string productName = dr["PRO_Name"].ToString();
    string productPrice = dr["PRO_Price"].ToString();
    string myUrl = "Handler.ashx?ProdID=" + dr["PRO_ID"].ToString();

        string sProduct = @"<div class='four-shop columns isotope-item'><div class='shop-item'><figure><img src='" + myUrl + "'/><figcaption class='item-description'><h5>" + productName + "</h5><span>R" + productPrice + "</span></figcaption></figure></div></div>";
        productPanel.Controls.Add(new LiteralControl(sProduct));
}

我想知道如何添加一个按钮,其中包含我的文字控件中的单击事件。我已创建此按钮但无法将其添加到文字控件,因为文字控件只显示标记而不是服务器端控件。如何从数据库中添加到购物页面的每个产品动态添加此按钮。

Button button = new Button();
button.Text = "Add to cart";
button.Click += button_Click;

5 个答案:

答案 0 :(得分:0)

而不是使用文字控制。您可以直接在页面控件中添加它,如果您仍然热衷于使用容器控件,那么请使用面板控件。

此致

答案 1 :(得分:0)

我建议你为你的产品构建一个用户控件。构建一个控件,例如:一个Image控件,一个描述标签控件,价格标签等,以及一个添加到购物车的按钮等。

通过这种方式,您可以为显示的每个产品动态创建控件,在添加按钮中添加代码,并为每个产品设置代码中的图像,描述等产品属性。<​​/ p>

用户控件将在页面上呈现为普通HTML,但它允许您在代码中使用“控件”/对象,为每个产品。

答案 2 :(得分:0)

为什么不使用Repeater,而不是做这样的动态。这将使您免于头痛:

<asp:Repeater id="repeat" runat="server">
 <ItemTemplate>
       <div class='four-shop columns isotope-item'><div class='shop-item'><figure><img src='<%#string.Format("Handler.ashx?ProdID={0}",Eval("PRO_ID")) %>'/><figcaption class='item-description'><h5><%#Eval("PRO_Name")%> </h5><span><%#Eval("PRO_Name")%> </span></figcaption></figure></div></div>      
       <asp:button id="btnAdd" runat="server" Text="Add to Cart" OnClick="btnAdd_Click" />
 </ItemTemplate>
</asp:Repeater>

在后面的代码中,您可以为按钮单击定义处理程序:

protected void btnAdd_Click(object sender, EventArgs e)
{
     //handle add for the product here
}

答案 3 :(得分:0)

像这样使用

Button button = new Button();
button.Text = "Add to cart";
button.Click += button_Click;
productPanel.Controls.Add(button );

添加文字控件后。如果你想要它在LiteralControl(即sProduct)之间的某个地方,你必须把它分成两个。

像这样,

string sProduct = @"<div class='four-shop columns isotope-item'><div class='shop-item'><figure><img src='" + myUrl + "'/><figcaption class='item-description'><h5>" + productName + "</h5><span>R" + productPrice + "</span></figcaption></figure>";
        productPanel.Controls.Add(new LiteralControl(sProduct));
    Button button = new Button();
    button.Text = "Add to cart";
    button.Click += button_Click;
    productPanel.Controls.Add(button );
    productPanel.Controls.Add(new LiteralControl("</div></div>"));

但是,建议不要使用像这样的LiteralControl。您可以在此方案中使用HtmlGenericControl。

答案 4 :(得分:0)

尝试这种方法。

Table tb = new Table();

for (int i = 1; i <= 10; i++)
        {
            TableRow tr = new TableRow();
            TableCell td = new TableCell();
            Button bt = new Button();
            bt.ID = i.ToString();
            bt.Text = "Button " + i.ToString();
            bt.Click += new EventHandler(btn_Click);
            td.Controls.Add(bt);
            tr.Controls.Add(td);
            tb.Controls.Add(tr);
        }

dvTest.Controls.Add(tb);