Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# web用户控件中Dropdownlist的回发所有其他字段变为空_C#_Asp.net_Updatepanel - Fatal编程技术网

C# web用户控件中Dropdownlist的回发所有其他字段变为空

C# web用户控件中Dropdownlist的回发所有其他字段变为空,c#,asp.net,updatepanel,C#,Asp.net,Updatepanel,我有一个aspx页面,其中面板内有占位符 作为 我还在页面加载上维护web用户控件 if (Page.IsPostBack) { if (ViewState["path"] != null) { Control uc1 = (Control)Page.LoadControl(ViewState["path"].ToString()); PlaceHol

我有一个aspx页面,其中面板内有占位符

作为

我还在页面加载上维护web用户控件

        if (Page.IsPostBack)
        {
            if (ViewState["path"] != null)
            {
                Control uc1 = (Control)Page.LoadControl(ViewState["path"].ToString());

                PlaceHolder pl = MainPanel.FindControl(ViewState["controlname"].ToString()) as PlaceHolder;
                pl.Controls.Add(uc1);
            }
        }
当iam从用户控件中选择任何选项时,表单用户控件上有一个下拉列表,它会发回,而文本框等的所有其他字段都变为空。这是第一次发生,下一次所有字段都保留这些值

请帮忙


谢谢

尝试更改
页面。iPostback
!Page.IsPostback
Page\u Load
事件中。

动态添加的控件不会在回发之间持久化;您必须在每个回发上重新添加动态添加的控件。在每个页面请求中,asp.net都将解析您的aspx文件,构建页面的html结构,然后通过ViewState和posted Value填写以前填写的任何值,然后提供这些值。就这样。它永远不会自动重新添加动态添加的内容

所以一旦你运行了这个代码

protected void usercontrol_Click(object sender, EventArgs e)
{
    //...
    Control uc = (Control)Page.LoadControl("~/usercontrol_Data.ascx");

    ViewState["path"] = "~/usercontrol_Data.ascx";
    ViewState["controlname"] = "PlaceHolder1";
    ViewState["name"] = "usercontrol";
    PlaceHolder1.Controls.Add(uc);
}

您需要知道如何在每次用户发回时重新运行它

我通过在每次控件动态加载时为控件分配相同的ID来实现这一点。这是因为当控件每次动态添加时,它都会获得新的ID,这会给我带来问题

uc1.ID=“网络用户控制ID”


每一次控制负载将这个ID与它对应,将为以后的帖子返回

问题,考虑将不必要的代码从您所发布的摘录中删除。第一个示例中的所有div都很难看到发生了什么,并且对功能没有影响。这只是一个建议。谢谢你的建议,我会记住这个问题,我如何才能重新运行这个代码,我正在维护页面加载状态,就像我的问题一样。有什么建议吗?把上面的代码重构成一个新的方法;说LoadMyControl并在usercontrol中调用它,单击并页面加载事件。@gurbaxsingbhangal-Kev是对的。您需要将添加代码的控件放在一个位置,并在需要时重新调用页面加载
        if (Page.IsPostBack)
        {
            if (ViewState["path"] != null)
            {
                Control uc1 = (Control)Page.LoadControl(ViewState["path"].ToString());

                PlaceHolder pl = MainPanel.FindControl(ViewState["controlname"].ToString()) as PlaceHolder;
                pl.Controls.Add(uc1);
            }
        }
protected void usercontrol_Click(object sender, EventArgs e)
{
    //...
    Control uc = (Control)Page.LoadControl("~/usercontrol_Data.ascx");

    ViewState["path"] = "~/usercontrol_Data.ascx";
    ViewState["controlname"] = "PlaceHolder1";
    ViewState["name"] = "usercontrol";
    PlaceHolder1.Controls.Add(uc);
}