如何使用变量或函数在HTML中声明我的SqlDataSource ID
本文关键字:声明 我的 SqlDataSource ID HTML 何使用 变量 函数 | 更新日期: 2023-09-27 18:06:01
我正在编写一个for循环,它显示了一些chartfx显示的链接列表。图表需要一个sqlDataSource。我试图给唯一的ID每次循环做一个迭代,但我不能传递它的值或函数。下面的例子在我的代码。getSQLID()只是一个函数,它返回一个字符串,我想作为我的ID。这都是在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);
首先,回想一下,像这样在设计器中声明的服务器控件是在编译时附加到类的。因此,在运行时尝试在循环中创建多个实例是没有意义的,这就是为什么在例如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
}