0

视觉工作室 2008、C#、ASP.NET

需要以编程方式制作 Web 用户控件的多个副本(或实例)。

我有 UserControlFile.ascx,其中包含一个带有 ID=" vhLabel " 的asp:Label。在该文件中,我像往常一样通过公共字符串vhText变量设置标签的 Text 属性:

public string vhText
{
    set
    {
        vhLabel.Text = value;
    }
}

此文件中还有一些 div 和其他 html 数据无法在 C# 中以编程方式创建,因此我必须使用 ascx 文件。

现在,在代码隐藏文件中,我需要:

  1. 多次克隆此用户控件;
  2. 通过“vhText”变量为每个克隆的标签属性“Text”设置唯一值。

请分享您对这些问题的建议。如果你需要,我可以在这里展示我的代码。我一直在寻找答案很长时间,但仍然没有成功。

4

2 回答 2

0

您需要使用 LoadControl 方法:

MyUserControl control = (MyUserControl)Page.LoadControl("~/UserControlFile.ascx");
control.vhText = "first control";
Page.Controls.Add(control);

control = (MyUserControl)Page.LoadControl("~/UserControlFile.ascx");
control.vhText = "second control";
Page.Controls.Add(control);

control = (MyUserControl)Page.LoadControl("~/UserControlFile.ascx");
control.vhText = "third control";
Page.Controls.Add(control);
于 2013-03-18T15:09:13.700 回答
0

您可以在此处找到如何以编程方式将用户控件添加到页面的演练:http: //msdn.microsoft.com/en-us/library/c0az2h86 (v=vs.100).aspx

在你的情况下,你需要在你的UserControlFile.ascx控制中这样的东西(className属性是重要的一点):

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="UserControlFile.ascx.cs" Inherits="UserControlFile" className="MyUserControl" %>
<asp:Label ID="vhLabel" runat="server"></asp:Label>

然后,在包含控件的页面顶部(更改适合您的结构的文件路径):

<%@ Reference Control="~/Controls/UserControlFile.ascx" %>

最后,页面后面的代码将包含通过LoadControl方法和类型的使用以编程方式添加控件实例的代码 - 在上面 @Control 指令MyUserControl的属性中定义:className

protected void Page_Load(object sender, EventArgs e)
{
    var control = (ASP.MyUserControl)LoadControl("~/Controls/UserControlFile.ascx");
    control.vhText = "1";
    Page.Controls.Add(control);

    control = (ASP.MyUserControl)LoadControl("~/Controls/UserControlFile.ascx");
    control.vhText = "2";
    Page.Controls.Add(control);

    /* etc... */
}

那应该为您指明正确的方向...

于 2013-03-18T15:26:32.653 回答