动态控件消失ASP.NET C#(根据DropDownList选择加载控件)

动态控件消失ASP.NET C#(根据DropDownList选择加载控件),c#,asp.net,dynamic,placeholder,C#,Asp.net,Dynamic,Placeholder,我是ASP.NET的新手;我在页面中有一个下拉列表(带有母版页): 等等。代码如下: public partial class Controles : System.Web.UI.Page { private Label _Label; private TextBox _TextBox = new TextBox(); private Calendar _Calendar = new Calendar(); private DropDownList _DropDo

我是ASP.NET的新手;我在页面中有一个下拉列表(带有母版页):

等等。代码如下:

public partial class Controles : System.Web.UI.Page
{
    private Label _Label;
    private TextBox _TextBox = new TextBox();
    private Calendar _Calendar = new Calendar();
    private DropDownList _DropDownList = new DropDownList();

    private string[] CompresorDeAire = new string[] { "TextBox", "Calendar", "TextBox" };
    private string[] CompresorUnidadDeRefrigeracion = new string[] { "DropDownList", "TextBox", "Calendar", "Calendar", "TextBox" };
    private string[] CompresorUnidadDeRefrigeracionTipoCompresor = new string[] { "Compresor Alternativo", "Compresor de Tornillo", "Unidad de Refrigeración" };
    private string[] BombaElectrica = new string[] { "TextBox", "TextBox", "TextBox", "TextBox", "TextBox", "TextBox" };

    protected void Page_Load(object sender, EventArgs e)
    {
       LoadInfo(CompresorDeAire);
    }

    private void LoadInfo(string[] Arreglo)
    {
        for (int i = 0; i < Arreglo.Length; i++)
        {
            _Label = new Label();
            _TextBox = new TextBox();
            _Calendar = new Calendar();
            _DropDownList = new DropDownList();

            _Label.Text = Arreglo[i].ToString() + i.ToString();
            _Label.ID = _Label.Text;
            PlaceHolder1.Controls.Add(_Label);
            PlaceHolder1.Controls.Add(new LiteralControl("<br />"));

            if (Arreglo[i] == _TextBox.GetType().Name.ToString())
            {
                _TextBox.ID = "txt" + _Label.ID;
                //_TextBox.AutoPostBack = true;
                PlaceHolder1.Controls.Add(_TextBox);
            }
            else if (Arreglo[i] == _Calendar.GetType().Name.ToString())
            {
                _Calendar.ID = "cln" + _Label.ID;
                PlaceHolder1.Controls.Add(_Calendar);
            }
            else if (Arreglo[i] == _DropDownList.GetType().Name.ToString())
            {
                _DropDownList.ID = "cmb" + _Label.ID;

                //_DropDownList.AutoPostBack = true;
                foreach (var item in CompresorUnidadDeRefrigeracionTipoCompresor)
                {
                    int j = 0;
                    _DropDownList.Items.Add(item);
                    j++;
                }

                PlaceHolder1.Controls.Add(_DropDownList);
            }

            PlaceHolder1.Controls.Add(new LiteralControl("<br /><br />"));
        }
    }

    protected void cmbPrueba_SelectedIndexChanged(object sender, EventArgs e)
    {
        txtMensaje.Text = "";
        PlaceHolder1.Controls.Clear();

        switch (cmbPrueba.SelectedIndex)
        {
            case 0:
                this.LoadInfo(CompresorDeAire);
                break;

            case 1:
                this.LoadInfo(CompresorUnidadDeRefrigeracion);
                break;

            case 2:
                this.LoadInfo(BombaElectrica);
                break;
        }
    }

    protected void btnActualizar_Click(object sender, EventArgs e)
    {
        txtMensaje.Text = "";

        for (int i = 0; i < PlaceHolder1.Controls.Count; i++)
        {
            switch (PlaceHolder1.Controls[i].GetType().Name.ToString())
            {
                case "TextBox":
                    TextBox TB = PlaceHolder1.FindControl(PlaceHolder1.Controls[i].ID) as TextBox;
                    txtMensaje.Text += PlaceHolder1.Controls[i].GetType().Name + " " + PlaceHolder1.Controls[i].ID + " " + TB.Text + "\n";
                    TB.Text += "*";

                    break;

                case "Calendar":
                    Calendar Cal = PlaceHolder1.FindControl(PlaceHolder1.Controls[i].ID) as Calendar;
                    txtMensaje.Text += PlaceHolder1.Controls[i].GetType().Name + " " + PlaceHolder1.Controls[i].ID + " " + Cal.SelectedDate.ToShortDateString() + "\n";
                    break;

                case "DropDownList":
                    DropDownList DD = PlaceHolder1.FindControl(PlaceHolder1.Controls[i].ID) as DropDownList;

                    txtMensaje.Text += PlaceHolder1.Controls[i].GetType().Name + " " + PlaceHolder1.Controls[i].ID + " " + DD.Text + "\n";
                    break;
            }
        }
    }

    protected void btnLimpiar_Click(object sender, EventArgs e)
    {
        PlaceHolder1.Controls.Clear();
        txtMensaje.Text = "";
    }
}
公共部分类控件:System.Web.UI.Page
{
自有品牌(简称"自有品牌"),;
私有文本框_TextBox=新文本框();
私人日历_Calendar=新日历();
私有DropDownList_DropDownList=新的DropDownList();
私有字符串[]compresordaire=新字符串[]{“文本框”、“日历”、“文本框”};
私有字符串[]compressornidadderefigeracion=新字符串[]{“DropDownList”、“TextBox”、“Calendar”、“Calendar”、“TextBox”};
私有字符串[]compressorundedrefrigeraciontipocompresor=新字符串[]{“compressor Alternativo”、“compressor de Tornillo”、“Unidad de Refrigeración”};
私有字符串[]BombaElectrica=新字符串[]{“TextBox”、“TextBox”、“TextBox”、“TextBox”、“TextBox”};
受保护的无效页面加载(对象发送方、事件参数e)
{
LoadInfo(compressordaire);
}
私有void LoadInfo(字符串[]Arreglo)
{
for(int i=0;i”);
if(Arreglo[i]==\u TextBox.GetType().Name.ToString())
{
_TextBox.ID=“txt”+\u Label.ID;
//_TextBox.AutoPostBack=true;
占位符1.控件。添加(\u文本框);
}
else if(Arreglo[i]==\u Calendar.GetType().Name.ToString())
{
_Calendar.ID=“cln”+\u Label.ID;
占位符1.控件。添加(\u日历);
}
else if(Arreglo[i]==\u DropDownList.GetType().Name.ToString())
{
_DropDownList.ID=“cmb”+_Label.ID;
//_DropDownList.AutoPostBack=true;
foreach(压缩机运行中的var项目制冷系统压缩机)
{
int j=0;
_DropDownList.Items.Add(item);
j++;
}
占位符1.控件.添加(_DropDownList);
}
占位符1.Controls.Add(新的LiteralControl(“

”); } } 受保护的无效cmbPrueba\u SelectedIndexChanged(对象发送方,事件参数e) { txtMensaje.Text=“”; 占位符1.Controls.Clear(); 开关(cmbPrueba.SelectedIndex) { 案例0: 此.LoadInfo(compresordaire); 打破 案例1: 此.LoadInfo(压缩运行和制冷); 打破 案例2: 这是LoadInfo(孟买电气); 打破 } } 受保护的无效btnActualizar\u单击(对象发送者,事件参数e) { txtMensaje.Text=“”; 对于(int i=0;i<1.Controls.Count;i++) { 开关(占位符1.Controls[i].GetType().Name.ToString()) { 案例“文本框”: TextBox TB=Placeholder 1.FindControl(Placeholder 1.Controls[i].ID)作为TextBox; txtMensaje.Text+=placeholder 1.Controls[i].GetType().Name+“”+placeholder 1.Controls[i].ID+“”+TB.Text+“\n”; TB.Text+=“*”; 打破 案例“日历”: Calendar Cal=Placeholder 1.FindControl(Placeholder 1.Controls[i].ID)作为日历; txtMensaje.Text+=placeholder 1.Controls[i].GetType().Name+“”+placeholder 1.Controls[i].ID+“”+Cal.SelectedDate.ToShortDateString()+“\n”; 打破 案例“DropDownList”: DropDownList DD=placeholder 1.FindControl(placeholder 1.Controls[i].ID)作为DropDownList; txtMensaje.Text+=placeholder 1.Controls[i].GetType().Name+“”+placeholder 1.Controls[i].ID+“”+DD.Text+“\n”; 打破 } } } 受保护的无效btnLimpiar\U单击(对象发送者,事件参数e) { 占位符1.Controls.Clear(); txtMensaje.Text=“”; } }
当我运行默认值为
Index=0
的代码时,我使用文本框和日历,单击“实现”,我可以在文本框中看到信息,当我选择
Index=1
(并加载第二个数组)时,所有新控件都会显示,但如果我选择日期或在文本框中写入内容,然后单击按钮“实现”该页将返回到上一页(数组1)


我感谢你的帮助!谢谢。

我假设当你说“页面返回到上一页(数组1)”时,你指的是第一个数组(在第0个元素中)

问题是.NET不会自动在回发邮件时为您重新创建动态控件。你必须处理好这件事

以下是第一页请求的基本步骤:

  • 执行Page_load事件,该事件调用CompressOrdeAir的LoadInfo
然后,当您在下拉列表中选择一个不同的条目,然后单击“实施器”按钮时,它会使用以下基本步骤进行回发:

  • 执行Page_load事件,该事件调用CompressOrdeAir的LoadInfo

  • 执行cmbPrueba_SelectedIndexChanged,它将丢弃页面加载中添加的动态控件,并加载所选索引的控件

  • 执行btnActualizer_Click事件,该事件显示动态占位符中的控件,这些控件是用于所选下拉值的控件

然后,当您更改文本或日期,然后单击Ac
private string[] CompresorUnidadDeRefrigeracionTipoCompresor = new string[] { "Compresor Alternativo", "Compresor de Tornillo", "Unidad de Refrigeración" };
public partial class Controles : System.Web.UI.Page
{
    private Label _Label;
    private TextBox _TextBox = new TextBox();
    private Calendar _Calendar = new Calendar();
    private DropDownList _DropDownList = new DropDownList();

    private string[] CompresorDeAire = new string[] { "TextBox", "Calendar", "TextBox" };
    private string[] CompresorUnidadDeRefrigeracion = new string[] { "DropDownList", "TextBox", "Calendar", "Calendar", "TextBox" };
    private string[] CompresorUnidadDeRefrigeracionTipoCompresor = new string[] { "Compresor Alternativo", "Compresor de Tornillo", "Unidad de Refrigeración" };
    private string[] BombaElectrica = new string[] { "TextBox", "TextBox", "TextBox", "TextBox", "TextBox", "TextBox" };

    protected void Page_Load(object sender, EventArgs e)
    {
       LoadInfo(CompresorDeAire);
    }

    private void LoadInfo(string[] Arreglo)
    {
        for (int i = 0; i < Arreglo.Length; i++)
        {
            _Label = new Label();
            _TextBox = new TextBox();
            _Calendar = new Calendar();
            _DropDownList = new DropDownList();

            _Label.Text = Arreglo[i].ToString() + i.ToString();
            _Label.ID = _Label.Text;
            PlaceHolder1.Controls.Add(_Label);
            PlaceHolder1.Controls.Add(new LiteralControl("<br />"));

            if (Arreglo[i] == _TextBox.GetType().Name.ToString())
            {
                _TextBox.ID = "txt" + _Label.ID;
                //_TextBox.AutoPostBack = true;
                PlaceHolder1.Controls.Add(_TextBox);
            }
            else if (Arreglo[i] == _Calendar.GetType().Name.ToString())
            {
                _Calendar.ID = "cln" + _Label.ID;
                PlaceHolder1.Controls.Add(_Calendar);
            }
            else if (Arreglo[i] == _DropDownList.GetType().Name.ToString())
            {
                _DropDownList.ID = "cmb" + _Label.ID;

                //_DropDownList.AutoPostBack = true;
                foreach (var item in CompresorUnidadDeRefrigeracionTipoCompresor)
                {
                    int j = 0;
                    _DropDownList.Items.Add(item);
                    j++;
                }

                PlaceHolder1.Controls.Add(_DropDownList);
            }

            PlaceHolder1.Controls.Add(new LiteralControl("<br /><br />"));
        }
    }

    protected void cmbPrueba_SelectedIndexChanged(object sender, EventArgs e)
    {
        txtMensaje.Text = "";
        PlaceHolder1.Controls.Clear();

        switch (cmbPrueba.SelectedIndex)
        {
            case 0:
                this.LoadInfo(CompresorDeAire);
                break;

            case 1:
                this.LoadInfo(CompresorUnidadDeRefrigeracion);
                break;

            case 2:
                this.LoadInfo(BombaElectrica);
                break;
        }
    }

    protected void btnActualizar_Click(object sender, EventArgs e)
    {
        txtMensaje.Text = "";

        for (int i = 0; i < PlaceHolder1.Controls.Count; i++)
        {
            switch (PlaceHolder1.Controls[i].GetType().Name.ToString())
            {
                case "TextBox":
                    TextBox TB = PlaceHolder1.FindControl(PlaceHolder1.Controls[i].ID) as TextBox;
                    txtMensaje.Text += PlaceHolder1.Controls[i].GetType().Name + " " + PlaceHolder1.Controls[i].ID + " " + TB.Text + "\n";
                    TB.Text += "*";

                    break;

                case "Calendar":
                    Calendar Cal = PlaceHolder1.FindControl(PlaceHolder1.Controls[i].ID) as Calendar;
                    txtMensaje.Text += PlaceHolder1.Controls[i].GetType().Name + " " + PlaceHolder1.Controls[i].ID + " " + Cal.SelectedDate.ToShortDateString() + "\n";
                    break;

                case "DropDownList":
                    DropDownList DD = PlaceHolder1.FindControl(PlaceHolder1.Controls[i].ID) as DropDownList;

                    txtMensaje.Text += PlaceHolder1.Controls[i].GetType().Name + " " + PlaceHolder1.Controls[i].ID + " " + DD.Text + "\n";
                    break;
            }
        }
    }

    protected void btnLimpiar_Click(object sender, EventArgs e)
    {
        PlaceHolder1.Controls.Clear();
        txtMensaje.Text = "";
    }
}