Стол метки ASP.net - PullRequest
       71

Стол метки ASP.net

1 голос
/ 24 апреля 2011

Я хочу знать, могу ли я создать массив меток в коде Behind.И затем, если я могу поместить метку из .aspx в массив меток с идентификатором и манипулировать им с этим.

Спасибо

Ответы [ 3 ]

3 голосов
/ 24 апреля 2011

Со страницей, которая выглядит примерно так:

<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>

, вы получите массив всех меток в <div id="labelSpace"> и ни один из других элементов управления:

  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<T>..."

Как только выдостигнув этого уровня, вы можете использовать LINQ для выбора конкретной метки или набора меток на основе любого свойства, которое вы хотите.

2 голосов
/ 24 апреля 2011

Да, вы можете.Метки из части .aspx будут иметь соответствующий объект в файле codebehind.В них нет ничего особенного, они похожи на любой другой объект .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" />

Файл codebehind будет иметь что-то вроде

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 с четырьмя метками в неми тогда вы можете делать с ними все, что захотите.Тогда вы можете сделать labels[0], чтобы добраться до первого и т. Д. Это то, что вы имели в виду?

0 голосов
/ 24 апреля 2011

Label[] labels = new Label[10];<br> labels[0] = new Label();<br> labels[0].Text = "blablabla";<br> ...<br><br> labels[9] = new Label();<br> labels[9].Text = "blablabla";<br>

...