gpt4 book ai didi

asp.net - 基于静态控件的选定值创建动态控件

转载 作者:行者123 更新时间:2023-12-04 07:02:42 25 4
gpt4 key购买 nike

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

我的理解是需要在 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;”这一行我希望获得当前选择并基于此设置动态控件的文本属性值。但是当前选择尚未设置,因为它在 OnInit 中。

最佳答案

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

所以,而不是做:

string selected = myDropDown.SelectedValue;

你做
string selected = Request.Form[myDropDownUniqueID];

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

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

关于asp.net - 基于静态控件的选定值创建动态控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1598924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com