如何在asp.net aspx文件中动态创建控件

蒂姆·阿特利

我在将 Button 控件添加到 .aspx 页面中的特定位置时遇到了困难。我想我可以创建按钮,但我不知道如何将它添加到页面。

代码如下:

                <%
                    var cpus = productItems.FindAll(t => t.Type == "cpu");
                    foreach (var cpu in cpus)
                    { %>
                <div class="row product cpu">
                    <div class="col-md-3">
                        <img class="center-block" src="Content/images/processor.jpg" />
                        <span class="price"><%= cpu.Price %></span>
                        <span class="addtocart">
                            <% Button b = new Button();
                                b.ID = "Button" + cpu.ID;
                                b.CommandArgument = cpu.ID.ToString();
                                b.Text = "Add to Cart";
                                b.OnClientClick = "Addtocart_Click";
                            %>
                        </span>
                        <br />
                    </div>
                </div>
                <% } %>

我也可以创建 Button 作为 productItems 集合的一部分,但仍然存在如何在页面上呈现按钮的问题。

我确定有更好的方法来做到这一点,只是不知道在哪里看。

提前致谢。

斯科特·鲍德里克

在 WebForms 中,您可以使用具有数据源(对象的一些列表)概念的列表控件和呈现每个对象如何显示的模板。通常,只要您有要在网站上呈现的项目列表,就应该使用这些。

在这种特殊情况下,您可能希望使用ListView控件。这允许您定义布局模板和项目模板。

您的 aspx 标记如下所示:

<asp:ListView ID="lvCpus" OnItemDataBound="lvCpus_ItemDataBound" runat="server">
    <LayoutTemplate>
        <div class="row product cpu">
            <div runat="server" id="itemPlaceholder"></div>
        </div>
    </LayoutTemplate>
    <ItemTemplate>
        <div runat="server" class="col-md-3">
            <img class="center-block" src="Content/images/processor.jpg" />
            <span class="price"><%# Eval("Price") %></span>
            <span class="addtocart">
                <asp:Button ID="addToCart" Text="Add To Cart" runat="server" />
            </span>
        </div>
    </ItemTemplate>
</asp:ListView>

这定义了一个 ListView 控件并创建了一个LayoutTemplate与您的容器相匹配的控件它在内部有一个 div,该 div 必须具有 id itemPlaceholder,用于填充绑定到此控件的各种项目。

ItemTemplate部分定义了您期望每个单独项目的外观。在本例中,它是一个包含要购买的 CPU 的列。

请注意,该按钮被定义为常规 ASP Web 控件,但没有设置任何动态数据。那是因为如果您尝试像CommandArgument评估项一样分配属性,则服务器标记的格式将不正确,您将获得 YSOD。要解决此问题,您需要为将数据绑定到此 Web 控件时调用的 ListView 指定一个 OnItemDataBound 函数。就我而言,它被称为lvCpus_ItemDataBound.

本例中的 ItemDataBound 方法如下所示:

protected void lvCpus_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    if (e.Item.ItemType == ListViewItemType.DataItem)
    {
        var cpu = e.Item.DataItem as Cpu;

        if (cpu == null)
        {
            return;
        }

        var btn = e.Item.FindControl("addToCart") as Button;

        if (btn == null)
        {
            return;
        }

        btn.CommandArgument = cpu.Id.ToString();
        // Set other server-side properties required from code.
    }
}

绑定数据源时,其中包含 0 个或多个项目。对于数据源中的每个项目,都会调用此方法,并让您指定无法在模板中直接表达的服务器端适当值。

在我们的例子中,我们CommandArgumentCpu类中指定,但也可以指定其他值。

最后,我们需要确保我们可以用数据填充列表视图。所以也许在 Page_Load 中,我们可以像下面这样将数据绑定到这个 ListView:

protected void Page_Load(object sender, EventArgs e)
{
    lvCpus.DataSource = GetCpus();
    lvCpus.DataBind();
}

private IEnumerable<Cpu> GetCpus()
{
    yield return new Cpu { Id = 1, Price = 5 };
    yield return new Cpu { Id = 2, Price = 10 };
    yield return new Cpu { Id = 3, Price = 15 };
    yield return new Cpu { Id = 4, Price = 15 };
    yield return new Cpu { Id = 5, Price = 20 };
}

我们首先将 List View 的数据源设置为您拥有的 CPU 列表,然后DataBind()在 ListView 上调用该方法。这会触发 OnItemDataBound 函数开始填充数据,最后您会在网站上显示 5 个 CPU。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在ASP.NET中动态创建的用户控件上找到控件?

来自分类Dev

如何在ASP.NET中动态创建的用户控件上找到控件?

来自分类Dev

如何在VB.NET中管理动态创建的控件?

来自分类Dev

在ASP.NET MVC4中动态创建控件

来自分类Dev

如何访问ASP.NET中动态创建的服务器控件

来自分类Dev

ASP .NET 动态创建用户控件

来自分类Dev

如何在 ASP .Net (Aspx) 中创建可从 Javascript 访问的 Web 服务方法?

来自分类Dev

如何在asp.net中将文本动态加载到用户控件标签中?

来自分类Dev

如何在asp.net页中查找标签控件

来自分类Dev

如何在ASP.NET 4.5中禁用对控件的验证

来自分类Dev

如何在Asp.Net MVC Razor中创建“通用”控件?

来自分类Dev

如何在ASP.NET MVC中创建可重用控件

来自分类Dev

如何验证在asp.net中动态添加的控件

来自分类Dev

如何在asp.net中动态显示记录?

来自分类Dev

如何在ASP.NET中动态设置图像URL

来自分类Dev

如何在C#asp.net中动态创建文本框?

来自分类Dev

如何在ASP.NET 5中动态创建和注入服务?

来自分类Dev

如何在ASP.net Core 2中创建动态API

来自分类Dev

如何在ASP.NET中创建动态生成的文本框

来自分类Dev

如何在asp.net的gridview中创建链接

来自分类Dev

如何在ASP.NET MVC中创建Webhook?

来自分类Dev

如何在asp.net中创建粘性会话

来自分类Dev

如何在ASP .NET Core中创建Azure AD用户?

来自分类Dev

如何在asp.net MVC中创建Ajax链接?

来自分类Dev

如何在ASP .NET Core中创建Azure AD用户?

来自分类Dev

如何在asp.net中创建粘性会话

来自分类Dev

如何在 ASP.Net MVC 中创建下拉列表

来自分类Dev

如何在 asp.net core 中创建类扩展?

来自分类Dev

(asp.net) 如何在 rest api 中创建计算

Related 相关文章

热门标签

归档