【问题标题】:Table of label ASP.netASP.net 标签表
【发布时间】:2011-08-11 17:04:29
【问题描述】:

我想知道我是否可以在后面的代码中创建一个标签数组。 然后,如果我可以将 .aspx 中的标签放入带有 id 的标签数组中并使用它进行操作。

谢谢

【问题讨论】:

  • “数组表”是什么意思?用一个数组制作一个 HTML 表格(如果是这样,类型??)。数据表可能吗?扩展您的目标,这将有助于我们更好地理解问题。
  • 您能否详细说明您想要实现的目标?我怀疑有一种比你建议的更有效的方法来实现预期的结果。

标签: asp.net label behind


【解决方案1】:

页面看起来像这样:

<body>
<form id="form1" runat="server">
<div id="labelSpace" runat="server">

<asp:Label ID="Label1" runat="server" Text="Label" Visible="false" >Label One</asp:Label><br />
<asp:Label ID="Label2" runat="server" Text="Label">Label Two</asp:Label><br />
<asp:Label ID="Label3" runat="server" Text="Label">Label Three</asp:Label><br />
<asp:Label ID="Label4" runat="server" Text="Label" Visible="false">Label Four</asp:Label></div><br />

<asp:Button ID="Button1" runat="server" Text="PostBack and Change Labels" />

</form>

这将为您提供&lt;div id="labelSpace"&gt; 中所有标签的数组,并且没有其他控件:

  protected void Page_Load(object sender, EventArgs e)
    {

        if (IsPostBack)//This will only fire after button is clicked...
        {
            //This does [just as you ask] provide you with an array of labels
            Label[] labels = this.labelSpace.Controls.OfType<Label>().ToArray<Label>();
            //& Allows you to manipulate a label in the code behind 
            // by addressing it's index value;
            labels[2].Text = "Modified In Code Behind";


            //Something you may find more useful than an array is getting 
            // a list of labels like:
            List<Label> listOfLabels = this.labelSpace.Controls.OfType<Label>().ToList<Label>();


            //with a list you can identify an individual label easily like:
            IEnumerable<Label> invisibleLabels = listOfLabels.Where(l => l.Visible == false);
            //with an 'IEnemerable of invisible labels you can now manipulate those to make them all visible...
            foreach (Label l in invisibleLabels)
            {
                l.Visible = true;
                l.Text = "Made Visible";
            }

            //or, if you just want a single label where the id is "Label2"
            var labelThree = labels.Where(p => p.ID == "Label2").First();
            labelThree.Text = "selected by label id and then edited";
        }
    }

如果您想从页面级别开始,您将需要构建一个递归例程来钻取子控件以创建一个 masterControlCollection,然后调用".OfType&lt;T&gt;..."

一旦你做到了这一点,你就可以使用 LINQ 根据你想要的任何属性来选择一个特定的标签或一组标签。

【讨论】:

  • 好呼吁将它们从控件集合中取出。
【解决方案2】:

是的,你可以。来自 .aspx 部分的标签将在代码隐藏文件中具有相应的对象。它们没有什么特别之处,它们就像任何其他 .NET 对象一样。例如,如果您的标记看起来像这样

<asp:Label runat="server" id="MyLabl1" Text="Some Text 1" />
<asp:Label runat="server" id="MyLabl2" Text="Some Text 2" />
<asp:Label runat="server" id="MyLabl3" Text="Some Text 3" />
<asp:Label runat="server" id="MyLabl4" Text="Some Text 4" />

代码隐藏文件会有类似

protected global::System.Web.UI.WebControls.Label MyLabl1;
protected global::System.Web.UI.WebControls.Label MyLabl2;
protected global::System.Web.UI.WebControls.Label MyLabl3;
protected global::System.Web.UI.WebControls.Label MyLabl4;

根据您的项目的设置方式,这可能位于 .cs 文件或 .designer.cs 文件中。从那里开始,没有什么能阻止您将它们添加到数组中并从那里使用它们。

例如

var labels = new Label[] { MyLabl1, MyLabl2, MyLabl3, MyLabl4 };

将创建一个名为 labels 的数组,其中包含 4 个标签,然后你可以对它们做任何你想做的事情。然后你可以通过labels[0] 到达第一个,等等。这是你的想法吗?

【讨论】:

    【解决方案3】:

    Label[] labels = new Label[10];
    labels[0] = new Label();
    labels[0].Text = "blablabla";
    ...

    labels[9] = new Label();
    labels[9].Text = "blablabla";

    【讨论】:

    • 如何从 aspx 中将 label(9) 识别为 labelId?
    • 不确定你的意思,它是你的标签数组中的一个标签....它将是 Label myLabel = (Label)labels[9];
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多