为什么没有我的控件显示在面板时,试图从asp控件拉它
本文关键字:控件 asp 我的 显示 为什么 | 更新日期: 2023-09-27 18:12:47
所以我有一个动态构建的表,它是由一个方法创建的,并加载到一个面板中,它像一个占位符,当它加载到页面中时,它的工作很好,当我上传页面。表格出现并按照我想要的方式加载。我唯一的问题是,我有两个下拉框的选项,用户选择更新表的这些列。问题是,当我去点击我的更新按钮,它搜索页面对应的控件(即下拉框中的值),得到适当的值来更新表,将在下面解释。
这就是我对我的更新按钮所做的:
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()是这样的:
public static Control FindControlRecursive( Control root, string id )
{
System.Web.UI.Control controlFound;
if ( root != null )
{
controlFound = root.FindControl( id );
if ( controlFound != null )
return controlFound;
foreach ( Control c in root.Controls )
{
controlFound = FindControlRecursive( c, id );
if ( controlFound != null )
return controlFound;
}
}
return null;
}
Update1 它所做的是,当它到达findcontrol方法时,它无法在面板中找到表,因此它返回null并且无法更新表。
我想知道的是,我在这里做错了什么,我怎么能解决这个问题?
任何帮助或建议都是非常感谢的。
谢谢
何时创建表?如果你是动态创建一个表,它必须重新创建不迟于OnInit为视图状态能够被恢复。
为什么不试试这个递归查找控件:
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所说的也很重要——在你用Update方法访问它之前,你的表是否用数据和用户输入重新创建/初始化了?