Стол метки ASP.net
Я хочу знать, могу ли я создать массив меток в коде. И затем, если я могу поместить метку из.aspx в массив меток с идентификатором и манипулировать им с этим.
Спасибо
3 ответа
Да, ты можешь. Метки из части.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
с 4 ярлыками, и вы можете делать с ними все, что захотите. Тогда вы можете сделать labels[0]
чтобы добраться до первого и т. д. Это то, что вы имели в виду?
Со страницей, которая выглядит примерно так:
<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 для выбора определенной метки или набора меток на основе любого свойства, которое вы хотите.
Label[] labels = new Label[10];
labels[0] = new Label();
labels[0].Text = "blablabla";
...
labels[9] = new Label();
labels[9].Text = "blablabla";