【问题标题】:how to persist dynamic control properties如何持久化动态控件属性
【发布时间】:2015-02-01 12:39:26
【问题描述】:

场景: 我已经通过后面的 c# 代码向我的页面动态添加了一个 asp 文本框控件。 我有一个删除该文本框的按钮,用文本框中的文本替换它。

问题: 当我按下按钮时,page_init->page_load->page_prerender 序列启动,擦除我的文本框控件。

我通过 page_prerender 中的方法初始化文本框。

我可以使用 viewstate 来保存值,但看到有启用视图状态等。跨回发持久化动态控件 textbox.text 属性的标准方法是什么?

我必须更新的代码

protected void Page_PreRender(object sender, EventArgs e)
{
    if (!IsPostBack)
    {

    }
    else
    {
         add_tb();
    }
}

private void add_tb()
{
    Textbox tb = new Textbox();
    pnlButtons.add(tb); //this is a panel init'd at design time which also includes a button
}
protected void imgBtn_Click_home(object sender, ImageClickEventArgs e)
{
    lblTest.Text=tb.Text; // where do i declare the tb to access it from here and to persist it?
}

另外,我在哪里声明 tb 以从这里访问它并保持它?

【问题讨论】:

    标签: c# asp.net dynamic viewstate


    【解决方案1】:

    您没有显示代码。我会用文字回答你。

    您应该始终添加控件,这发生在CreateChildControl Method

        TextBox txt;
    
        protected override void CreateChildControls()
        {
            base.CreateChildControls();
    
            txt = new TextBox();
            txt.ID = "textBoxTest";
            txt.Visible = false;
    
            pnlButtons.add(txt); // till now pnlButtons should be created because you call first for base.CreateChildControls
        }
    

    如果你想让控件在某些情况下不被“添加”,你只需让他默认可见 false。

    之后当你要去 OnPreRender 时

        protected override void OnPreRender(EventArgs e)
        {
            base.OnPreRender(e);
            if(condition)//condition is when you show your checkbox
            {
                txt.Visible = true;
                lblTest.Visible = false;
            }
            else
            {
                lblTest.Visible = true;
                txt.Visible = false;
            }
        }
    

    使控件在正确的情况下可见。当控件可见 false 时,他不会添加到页面中。您可以在页面的查看源代码中查看它。之后就不会出现像你这样的问题了!

    【讨论】:

    • thx 伙计,你能详细说明一下我发布的代码吗?
    • @Fearghal 你需要这样的东西。
    • 嗯,我检查一下 - 理想情况下,我希望页面与文本框一起返回,但可能还有其他复杂情况,出于清晰的原因,我没有将其包括在内。我有一个自定义控件,其中一部分是文本框。文本框有用户输入的文本并单击了一个按钮-我需要该文本,但由于刷新而在单击时失去了客户控制(以及其中包含的文本框)。我在上面查看它是否有帮助。明天回来回答。
    • @Fearghal 如果代码帮助您可以将答案标记为正确
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 2012-02-18
    • 2017-01-10
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 2019-09-17
    相关资源
    最近更新 更多