如何使用变量或函数在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);

如何使用变量或函数在HTML中声明我的SqlDataSource ID

首先,回想一下,像这样在设计器中声明的服务器控件是在编译时附加到类的。因此,在运行时尝试在循环中创建多个实例是没有意义的,这就是为什么在例如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
}