我今天遇到了一些奇怪的行为,我希望有人能为我解释一下,因为我很困惑。
我有几种方法用于与 ui 交互,其唯一目的是向用户显示错误/成功/警告消息。
这是其中之一
public static void Confirm(string text)
{
var page = (Page)HttpContext.Current.Handler;
var uiConfirm = new HtmlGenericControl("div")
{
ID = "uiNotify",
InnerHtml = text
};
uiConfirm.Attributes.Add("class", "ui-confirm");
page.Master.FindControl("form1").Controls.AddAt(2, uiConfirm);
}
这工作得很好,除了我今天早上遇到的一个细微差别,我希望有人可以为我解释一下。
我正在处理您运行的轧机配置文件编辑页面。在此页面中,我在页面加载时绑定了几个下拉列表(国家、省/州)。我在底部有一个提交和一个触发更新信息的点击事件,然后调用上面的方法通知用户他们的信息已成功更新。这在您第一次单击提交按钮时有效;页面回传,数据库中的信息得到更新,动态添加的 div 被弹出,显示确认消息,一切都很好。但是,如果您随后再次单击提交按钮,它将无法在我在页面加载中绑定的下拉列表中说明 SelectedItem 为空(对象引用未设置为对象的实例)。由于某种原因,下拉菜单实际上在第二个被擦除回发,但不是第一次。
在尝试了其他所有方法后,我绝望地决定取消对确认方法的调用……奇怪的是,错误消失了,我可以根据需要多次更新页面上的信息。
如果我将一个通用控件静态添加到我正在处理的页面中,并稍微更改我的方法,以便它不会动态地将通用控件添加到表单中,而是在页面上找到通用控件,这不会产生相同的错误.
如果我从页面中删除两个下拉菜单或停止与它们交互,问题也会消失。
为什么要在表单中添加动态控件以在回发时擦除我的下拉列表?