C# 为什么在尝试从asp控件中拉出控件时,面板中没有显示任何控件
因此,我有一个动态构建的表,它是由一个方法创建的,并加载到一个面板中,该面板充当它的占位符。当将它加载到页面中时,当我上载页面时,它工作正常。桌子上来了,正好按我想要的方式装载。我唯一的问题是,我有两个下拉框,其中包含用户选择用来更新表中这些列的选项。问题是,当我点击我的更新按钮时,它会在页面中搜索相应的控件(即Dropbox中的值),该控件将获得适当的值来更新表,下面将对此进行解释 这就是我使用“更新”按钮所做的:C# 为什么在尝试从asp控件中拉出控件时,面板中没有显示任何控件,c#,asp.net,html,controls,C#,Asp.net,Html,Controls,因此,我有一个动态构建的表,它是由一个方法创建的,并加载到一个面板中,该面板充当它的占位符。当将它加载到页面中时,当我上载页面时,它工作正常。桌子上来了,正好按我想要的方式装载。我唯一的问题是,我有两个下拉框,其中包含用户选择用来更新表中这些列的选项。问题是,当我点击我的更新按钮时,它会在页面中搜索相应的控件(即Dropbox中的值),该控件将获得适当的值来更新表,下面将对此进行解释 这就是我使用“更新”按钮所做的: protected void Update_Click(obj
protected void Update_Click(object sender, EventArgs e)
{
UpdateFail.Visible = false;
UpdateSucceed.Visible = false;
string MachineTypeID;
string MachineModelID;
string machinetypeid;
string machinemodelid;
int i = 0;
machine = inputsService.GetMachineSiteDetails(SiteID);
foreach (Machine Machine in machine)
{
try
{
machinetypeid = Machine.ID.ToString() + "type";
machinemodelid = Machine.ID.ToString() + "model";
Control type = MyExtensions.FindControlRecursive(this, machinetypeid);
Control model = MyExtensions.FindControlRecursive(this, machinemodelid);
RadComboBox machinetype = (RadComboBox) type;
RadComboBox machinemodel = (RadComboBox) model;
MachineTypeID = machinetype.SelectedValue;
MachineModelID = machinemodel.SelectedValue;
if (MachineTypeID != "")
{
inputsService.UpdateMachineModels(Machine.ID, MachineModelID);
i++;
}
if (MachineModelID != "")
{
inputsService.UpdateMachineTypes(Machine.ID, MachineTypeID);
i++;
}
}
catch (Exception ex)
{
{
logger.ErrorFormat(
"Update_Click exception occurred when attempting to update the database {0}", ex);
}
}
}
if (i != 0)
{
UpdateFail.Visible = false;
UpdateSucceed.Visible = true;
}
else
{
UpdateSucceed.Visible = false;
UpdateFail.Visible = true;
}
//clear out the old table and replace with the newly revized table.
AddTable();
}
现在我的问题与下面的两行代码有关
Control type = MyExtensions.FindControlRecursive(this, machinetypeid);
Control model = MyExtensions.FindControlRecursive(this, machinemodelid);
MyExtensions.FindControlRecursive()方法如下:
更新1
它所做的是,当它到达findcontrol方法时,它在pannel中找不到表,因此它返回null并无法更新表
我想知道的是,我在这里做错了什么,如何解决这个问题
非常感谢您的帮助或建议
谢谢您什么时候创建表?如果要动态创建表,必须在OnInit之前重新创建该表,才能还原viewstate。为什么不尝试此递归查找控件:
public static Control FindControlRecursive(this Control Root, string Id)
{
if (Root.ID == Id)
return Root;
foreach (Control Ctl in Root.Controls)
{
Control FoundCtl = FindControlRecursive(Ctl, Id);
if (FoundCtl != null)
return FoundCtl;
}
return null;
}
Shai所说的也很重要-在您使用更新方法访问表之前,是否正在使用数据和用户输入重新创建/初始化表?您实际上没有解释它在做什么/不在做什么。
public static Control FindControlRecursive(this Control Root, string Id)
{
if (Root.ID == Id)
return Root;
foreach (Control Ctl in Root.Controls)
{
Control FoundCtl = FindControlRecursive(Ctl, Id);
if (FoundCtl != null)
return FoundCtl;
}
return null;
}