Как использовать переменную или функцию для объявления моего идентификатора SqlDataSource в HTML
Я пишу цикл for, который отображает список ссылок с некоторым отображением диаграммы. Для chartfx требуется sqlDataSource. Я пытаюсь дать уникальный идентификатор каждый раз, когда цикл for выполняет одну итерацию, но я не могу передать ему значение или функцию. Пример ниже в моем коде. getSQLID() - это просто функция, которая возвращает строку, которую я хочу использовать в качестве своего идентификатора. Все это делается на странице aspx, а функция находится в.cs. Любая помощь будет очень признателен, спасибо.
//name of the contentplace holder on the aspx page
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server" >
//code behind
Control ctrl = LoadControl("WebUserControl.ascx");
Control placeHolderControl = this.FindControl("Content2");
Control placeHolderControl2 = this.FindControl("ContentPlaceHolder1");
ctrl.ID = "something";
if (placeHolderControl != null)
placeHolderControl.Controls.Add(ctrl);
if (placeHolderControl2 != null)
placeHolderControl2.Controls.Add(ctrl);
1 ответ
Прежде всего, помните, что серверные элементы управления, объявленные в конструкторе, как это, присоединяются к вашему классу во время компиляции. Поэтому не имеет смысла пытаться создавать несколько экземпляров в цикле во время выполнения, и поэтому значения, например, в теге Id, должны быть известны во время компиляции.
Один из вариантов - создать их в коде, например:
for (int i=0; i<2; ++i)
{
var chart = new Chart();
chart.Id = "chartId" + i;
chart.DataSourceId = "srcid" + i;
var src = new SqlDataSource();
src.Id = "srcid" + i;
Controls.Add(chart); // either add to the collection or add as a child of a placeholder
Controls.Add(src);
}
В вашем случае преобразование всех этих декларативных свойств в код позади может быть немного трудным (хотя это возможно). Альтернативой является создание пользовательского элемента управления (ascx), который содержит разметку, которая теперь находится на вашей странице aspx. Вы могли бы создать элементы управления в вашем коде с чем-то вроде:
for (int i=0; i<2; ++i)
{
var ctrl = LoadControl("~/path/to/Control.ascx");
ctrl.Id = "something_" + i;
Controls.Add(ctrl); // again, either here or as a child of another control
// make the src, hook them up
}