动态控件消失ASP.NET C#(根据DropDownList选择加载控件)
我是ASP.NET的新手;我在页面中有一个下拉列表(带有母版页): 等等。代码如下:动态控件消失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
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事件,该事件显示动态占位符中的控件,这些控件是用于所选下拉值的控件
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 = "";
}
}