C# 将动态通用html控件添加到页面会破坏绑定的dropdownlist

C# 将动态通用html控件添加到页面会破坏绑定的dropdownlist,c#,asp.net,.net,C#,Asp.net,.net,我今天遇到了一些奇怪的行为,我希望有人能为我解释一下,因为我很困惑 我有两种与ui交互的方法,其唯一目的是向用户显示错误/成功/警告消息 这是其中之一 public static void Confirm(string text) { var page = (Page)HttpContext.Current.Handler; var uiConfirm = new HtmlGenericControl("div") {

我今天遇到了一些奇怪的行为,我希望有人能为我解释一下,因为我很困惑

我有两种与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);
    }
除了我今天早上遇到的一个细微差别之外,这一切都很好,我希望有人能为我解释一下

我正在为您的常规配置文件编辑页面工作。在这个页面中,我在页面加载上绑定了几个dropdownlists(国家、省/州)。我在底部有一个submit和一个click事件,触发该事件来更新信息,然后调用上面的方法来通知用户他们的信息已成功更新。这在您第一次单击“提交”按钮时起作用;页面发回,数据库中的信息更新,动态添加的div弹出,显示确认消息,一切正常。但是,如果再次单击submit按钮,则无法在页面加载中声明我绑定的下拉列表中的SelectedItem为null(对象引用未设置为对象的实例)。由于某种原因,在第二次回发时,下拉列表实际上会被删除,但在第一次回发时不会

在尝试了所有其他方法后,我绝望地决定调用confirm方法。。。奇怪的是,错误消失了,我可以随时更新页面上的信息

如果我将一个泛型控件静态地添加到我正在处理的页面中,并稍微更改我的方法,这样它就不会在表单中动态地添加泛型控件,而是在页面上查找泛型控件,这不会产生相同的错误

如果我从页面中删除这两个下拉列表或停止与它们交互,问题也会消失


为什么要在表单上添加动态控件来擦除我的DoPrdon?< /P> < P>我想你应该考虑使用你的代码< MasterPage > <代码>,<代码> AdAAT(2,UnCon)<代码>会咬你,可能是:

标记:

.......
<asp:PlaceHolder id="PlaceHolder1" 
           runat="server"/>
......
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");

    //may need to change depending on where you put your placeholder
    Control placeHolder = page.Master.FindControl("PlaceHolder1"); 
    placeHolder.Controls.Clear();
    placeHolder.Controls.Add(uiConfirm);
}

<>我想你应该考虑在你的< MasterPage > <代码>中使用这个类,<代码> AdAt(2,UnCon)<代码>会咬你,可能是:

标记:

.......
<asp:PlaceHolder id="PlaceHolder1" 
           runat="server"/>
......
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");

    //may need to change depending on where you put your placeholder
    Control placeHolder = page.Master.FindControl("PlaceHolder1"); 
    placeHolder.Controls.Clear();
    placeHolder.Controls.Add(uiConfirm);
}

你的
页面加载
看起来像什么?你的
页面加载
看起来像什么?这正是我目前正在做的工作。我更想知道为什么原始代码会成为一个问题。你说要避开AddAt,因为它最终会咬我,有什么具体原因吗?是的,你是按索引引用控件集合,并假设它不会改变。我的建议是找到一个已知的占位符并在其中注入,这样控制顺序就不重要了。这正是我目前正在解决的问题。我更想知道为什么原始代码会成为一个问题。你说要避开AddAt,因为它最终会咬我,有什么具体原因吗?是的,你是按索引引用控件集合,并假设它不会改变。我的建议是找到一个已知的占位符并在其中注入,这样控制顺序就不重要了。