根据静态控件的选定值创建动态控件

时间:2009-10-21 05:45:27

标签: asp.net

我有一个下拉列表,其中包含一些选项。根据用户选择,我需要创建一些动态控件并在表单上呈现它们。

我的理解是需要在OnInit或CreateChildControls中创建动态控件,以便运行时正确恢复这些动态控件的ViewState。

问题是,我无法获取OnInit或CreateChildControls下拉列表的SelectedValue,因为尚未为下拉列表恢复ViewState。

有没有办法获取当前选择,以便我可以根据当前用户选择创建动态控件并正确添加页面

编辑: 标记如下:

<form id="form1" runat="server">
<div>
    <asp:DropDownList ID="ddl" runat="server" AutoPostBack="true"  AppendDataBoundItems="true">
        <asp:ListItem Text="(Select Color)" Value="" />
        <asp:ListItem Text="Red" Value="Red" />
        <asp:ListItem Text="Green" Value="Green" />
        <asp:ListItem Text="Blue" Value="Blue" />
    </asp:DropDownList>
    <asp:PlaceHolder ID="plHolder" runat="server" />
</div>
</form>

以下是代码:

 public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected override void CreateChildControls()
    {
        base.CreateChildControls();
        TextBox tb = new TextBox();
        if (ddl.Text != "")
        {
            tb.Text = ddl.Text;
            if (Session["id"] != null)
            {
                string id = Session["id"].ToString();
                tb.ID = id;
            }
            else
            {
                Session["id"] = tb.ID = Guid.NewGuid().ToString().Replace("-", "");
            }
            plHolder.Controls.Add(tb);
        }

    }
}

在“tb.Text = ddl.Text;”行上我希望获得当前选择并基于该设置动态控件的text属性的值。但目前的选择还没有确定,因为它在OnInit中。

2 个答案:

答案 0 :(得分:2)

如果确实需要在OnInit或CreateChildControls中创建控件,那么您可以做的一件事是在OnInit期间从Request.Form []集合中获取静态控件的值。

所以不要这样做:

string selected = myDropDown.SelectedValue;
你做了

string selected = Request.Form[myDropDownUniqueID];

...其中myDropDownID是分配给myDropDown的“唯一ID”。请注意,通常这将与分配给控件的“id”相同,除非它位于控件容器中。

这有效地将值直接从发送到服务器的HTML表单数据中提取出来,而不是等待ASP.NET将其解压缩到控件的属性中。

答案 1 :(得分:1)

在我的一个项目中,我在Page_Load中动态添加控件。

我使用SaveControlState和LoadControlState手动保存并加载控件视图状态。

http://msdn.microsoft.com/en-us/library/system.web.ui.control.loadcontrolstate.aspx

吉文。