【问题标题】:Dynamic Controls in asp.netasp.net 中的动态控制
【发布时间】:2009-06-03 13:34:15
【问题描述】:

是否可以执行回发并让视图状态记住以下代码中的选定值?

看来 placeholder1.controls.clear() 正在删除它。

  protected void Page_Load(object sender, EventArgs e)
{
    bind();
}
protected void bind()
{
    PlaceHolder1.Controls.Clear();        
    DropDownList ddl = new DropDownList() { AutoPostBack = true, ID="ddl" };
    ddl.SelectedIndexChanged += new EventHandler(ddl_SelectedIndexChanged);
    ddl.Items.Add("hi");
    ddl.Items.Add("bye");
    PlaceHolder1.Controls.Add(ddl);
}
void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
    bind();
}

【问题讨论】:

  • 尝试将其添加到 Page_Init 中,没有成功。

标签: asp.net dynamic controls


【解决方案1】:

尝试删除PlaceHolder1.Controls.Clear(); 方法,

并将您的 Bind() 呼叫移出 Page_Load 并移至 OnInit

您将遇到生命周期问题,因为在您重新创建控件之前,加载视图状态和事件触发代码已经发生

【讨论】:

  • 删除 placeholder1.controls.clear() 将意味着在尝试创建具有相同 ID 的控件两次后会出错。
  • 不,不会的。这些控件在每次后续刷新回发时动态重新创建。 PlaceHolder1.Controls 首先不包含任何内容。试试看
  • 我将您的消息解释为移动了 Bind();从 Page_Load(o,e) 到 Page_Init(o,e)。在 ddl 导致 postbackould 之后,Page_Init() 将触发 Bind();,然后 SelectedIndexChanged() 将被命中,导致 Bind() 再次运行();因此导致两个控件在 placeholder1 中具有相同 id 的异常。我是否误解了您的“OnInit”?
  • 抱歉,错过了最后一行...您不需要在 SelectedIndexChanged() 中重新绑定
  • 如果您只绑定一次,在 page_init() 中,并且在 selectedvalue/index 上与该方法相关的任何内容,那么您仍然拥有旧值。
【解决方案2】:

尝试从 Page_Init() 调用 bind()。

ViewState 在 Page_Init() 之后但在 Page_Load() 之前加载,因此当您从 Page_Load() 调用 bind() 时,您是在 .NET 尝试设置 DropDownList 的选定值但失败之后调用它。

【讨论】:

    【解决方案3】:

    是否有可能...让视图状态记住选定的值...?

    ViewState 数据在加载事件之前 恢复。如果您希望 ViewState 记住控件的任何内容,则该控件必须在加载事件之前也存在于页面上。

    我怀疑您的部分问题是您在 selectedindex 更改时重新创建下拉列表控件,但在该代码中没有设置 selectedindex ,因此每次设置时都会破坏选择。

    【讨论】:

      【解决方案4】:

      为什么不通过将 Visible 设置为 false 来隐藏 PlaceHolder?此外,当您需要动态注入内容时,请参阅 Truly Understanding Dynamic Controls 了解一下,因为动态控件远非简单。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-13
        • 2011-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-01
        • 1970-01-01
        相关资源
        最近更新 更多