Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.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# 通过下拉列表向页面添加动态ASP.NET控件_C#_Asp.net_Dynamic_Controls - Fatal编程技术网

C# 通过下拉列表向页面添加动态ASP.NET控件

C# 通过下拉列表向页面添加动态ASP.NET控件,c#,asp.net,dynamic,controls,C#,Asp.net,Dynamic,Controls,-主要信息: 在我最近的项目中,我需要有一个带有DropDownList的页面,其中包含一些项目,如“firstName”、“lastName”、“Age”等。当用户选择每个项目时,我想向页面添加可选控件。例如,当用户选择“年龄”时,另一个使用这些值动态创建的下拉列表:“小于10” “介于10和30之间” “超过30个” 下面是一个按钮,用于将此用户选择添加到列表框,并允许用户选择其他选项。(我最后根据用户的选择进行了查询并发送给db) -我的工作: 我创建了一个dropDownList,并将其

-主要信息:
在我最近的项目中,我需要有一个带有DropDownList的页面,其中包含一些项目,如“firstName”、“lastName”、“Age”等。当用户选择每个项目时,我想向页面添加可选控件。例如,当用户选择“年龄”时,另一个使用这些值动态创建的下拉列表:“小于10”
“介于10和30之间”
“超过30个”
下面是一个按钮,用于将此用户选择添加到列表框,并允许用户选择其他选项。(我最后根据用户的选择进行了查询并发送给db)
-我的工作:
我创建了一个dropDownList,并将其AutoPostBack属性设置为true,并在其中添加了一些项,用户必须选择其中一项。然后,在回发页面之前,我将用户选择的dropDownList值添加到缓存变量中:

protected void DropDownListColumnNameSelectedIndexChanged(object sender, EventArgs e)
    {
        Cache["SelectedKey"] = dropDownListColumnName.SelectedValue;
    }
当用户从dropDownList*dropDownList\u SelectedIndexChanged*中选择项目时,我必须在占位符中动态创建控件:

 var textBoxName = new TextBox
    {
        ID = "textBoxName",
        CssClass = "str-search-textbox-highlight",
        ViewStateMode = ViewStateMode.Disabled
    };
 placeHolderFirstItem.Controls.Add(textBoxName);
-有什么问题吗? 当我尝试在当前按钮单击事件中添加新控件时,控件已成功添加到页面,但我无法通过占位符FirstItem.Controls.find(“textBoxName”)找到它,实际上占位符FirstItem.Controls.Count始终为零。因此我无法获取textBoxName.Text值。
我尝试用谷歌搜索任何解决方案,发现一些解决方案必须在Page.OnInit中添加控件,因此我在覆盖的OnInit(e)中添加控件:

完成此操作后,我可以在Placeholder FirstItem中找到“textBoxName”,但它会在DropDownList\u SelectedIndexChanged之前触发
那么,当用户更改dropDownList值时,如何向placeholder添加新控件,以及如何读取新控件值?
提前感谢,
莫森

-更新:
这是更好的解决方案

()

动态添加控件时,必须在此后每次将控件重新加载到控件树中,控件才会出现。在viewstate的帮助下,您可以将代码示例更改为:

ViewState("ShowTextbox") = true
然后在初始化例程中:

protected override void OnInit(EventArgs e)
    {
        if (!Page.IsPostBack) return;

        if (ViewState("ShowTextBox") == true) {
           var textBoxName = new TextBox
           {
               ID = "textBoxName",
               CssClass = "str-search-textbox-highlight",
               ViewStateMode = ViewStateMode.Disabled
           };
           placeHolderFirstItem.Controls.Add(textBoxName);
        }
    }

请注意,由于这些ASP.NET控件树问题,在控件树上有一个控件,然后通过将Visible设置为true/false来显示/隐藏要容易得多。

感谢您的回复,但假设dropDownList中有大约10-15个项,它们必须在新的dropDownList中加载数据,我不认为这是一个正确的解决方案,隐藏和显示10-15个控件的每个帖子回来。我认为这不是一个完美的解决方案。我的编码解决方案没有使用显示/隐藏机制。。。而且您使用的是web表单,因此没有太多选项,除非您想在客户端完成所有操作,如果您发回,这将更成问题。
protected override void OnInit(EventArgs e)
    {
        if (!Page.IsPostBack) return;

        if (ViewState("ShowTextBox") == true) {
           var textBoxName = new TextBox
           {
               ID = "textBoxName",
               CssClass = "str-search-textbox-highlight",
               ViewStateMode = ViewStateMode.Disabled
           };
           placeHolderFirstItem.Controls.Add(textBoxName);
        }
    }