Asp.net 在显示旧值的动态添加的用户控件之间切换
编辑(更简短): 我有一个控件“配置”,左边是树状视图,右边是我添加控件的面板列表。这些元素被放置在一个表中,并由一个ajax面板包围 假设我有一个包含两个元素car1和car2的树节点cars。当我单击一个项目时,我将所选树节点的ID和类型保存在隐藏字段中,以便能够在页面_Init上加载正确的用户控件Asp.net 在显示旧值的动态添加的用户控件之间切换,asp.net,Asp.net,编辑(更简短): 我有一个控件“配置”,左边是树状视图,右边是我添加控件的面板列表。这些元素被放置在一个表中,并由一个ajax面板包围 假设我有一个包含两个元素car1和car2的树节点cars。当我单击一个项目时,我将所选树节点的ID和类型保存在隐藏字段中,以便能够在页面_Init上加载正确的用户控件 protected void Page_Init(object sender, EventArgs e) { var type = this.Request.Form["
protected void Page_Init(object sender, EventArgs e)
{
var type = this.Request.Form["ctl00$MainContent$ctl00$typeId"];
var id = this.Request.Form["ctl00$MainContent$ctl00$entityId"];
if (!string.IsNullOrEmpty(type) && !string.IsNullOrEmpty(id))
{
this.LoadUserControl(type, id);
}
}
private void LoadUserControl(string type, string id)
{
if (Convert.ToInt32(type) != 0)
{
switch (Convert.ToInt32(type))
{
case (int)SkTopics.Product:
this.AddUserControl("../Modules/Product.ascx", this.Product, type, id);
break;
}
}
}
private void AddUserControl(string controlName, Panel panel, string type, string id)
{
// Init new user cotntrol
control = (BaseControl)this.LoadControl(controlName);
control.LoadEntityItem(Convert.ToInt32(id));
// Setting the user control ID
var replace = controlName.Replace("../Modules/", string.Empty);
string userControlId = replace.Split('.')[0] + id;
var targetControl = panel.FindControl(userControlId);
if (object.Equals(targetControl, null))
{
control.ID = userControlId;
control.DataBind();
panel.Controls.Add(control);
}
}
On LoadEntityItem此车的数据从数据库中收集,值设置为文本框的文本。当我现在切换到第二辆车时,会显示新的值
问题:我更改文本框中的值,然后按save按钮调用用户控件的save方法。从现在起,当我再次切换到car 1时,car 2的值仍然显示,尽管car1的数据已填充。要查看car1的数据,我必须切换到完全不同的控制类型,然后返回到car1
另一个问题是,我在用户控件中有一个二进制图像,我在init中填充了该图像的数据。当我切换到下一辆车时,没有配置图像,我将图像数据设置为null,但显示的是前一辆车的图像。Onyl如果设置了不同的图像数据,则会显示新图像
我还注意到了一件事:
在用户控件内部,我调用了一个javascript函数,但这个函数只在单击save按钮时调用。树节点的切换和保存按钮点击之间似乎有不同
ScriptManager.RegisterStartupScript(this, this.GetType(), "InitScrewPointsForDragging", "InitScrewPointsForDragging();", true);
我希望这比以前更简短。问题的原因似乎是一些不正确的viewstate处理,在我禁用viewstate后,它在我这边正常工作。以下是我为使其在我身边工作而更新的代码: this.control.EnableViewState=false;
this.control.ID=userControlId 我更新了我的问题,我希望它现在更清楚了。如果没有,请告诉我,我会再试一次