【问题标题】:How to change property of UserControl on PostBack?如何在 PostBack 上更改 UserControl 的属性?
【发布时间】:2011-05-11 09:37:42
【问题描述】:

假设我有一个页面,其中包含我的自定义 UserControl(仅包含 asp:Literal 和一些字符串属性)和一个按钮。现在我想在按钮单击时更改文字的文本,所以我在按钮单击事件中更改了控件的字符串属性。像这样:

//in aspx
protected void Button1_Click(object sender, EventArgs e)
{
    testControl.Text = "triggered";
}

问题是我的 Literal 保持不变,因为 Page_Load 事件首先触发并创建我的自定义控件,然后Button_Clicked 触发并更改属性,但由于控件已经创建,它什么也不做。这是我的控件背后的代码:

public partial class TestControl : System.Web.UI.UserControl
{
    public string Text { get; set; } }

    protected void Page_Load(object sender, EventArgs e)
    {
        lblTest.Text = Text;
    }
}

我发现,如果我将自定义控件中的任何逻辑从 Page_Load 移动到属性设置器,它将按预期进行更改。像这样:

public string Text { get { return lblTest.Text; } set { lblTest.Text = value; } }

还有其他(更好的)方法可以做到这一点吗?我真正的问题涉及比这里描述的更复杂的控件,但问题仍然存在:在任何回发时,事件处理程序中设置的所有属性都被忽略。

【问题讨论】:

    标签: asp.net user-controls event-handling


    【解决方案1】:

    将所有逻辑从Page_Load 移动到Page_PreRender 解决了这个问题。现在在逻辑执行之前设置属性。我将等待其他答案以检查是否有更好的解决方案以及使用Page_PreRender 是否有任何缺点。

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 我认为这不完全是我的问题。问题在于在回发期间使用属性会更改它们。顺便说一句,为了在回发之间保留任何数据,我通常使用类似:public string Text { get { return (string)ViewState["Text"];} set { ViewState["Text"] = value; }。它似乎适用于基本属性,但我不确定是否在每种情况下;)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-13
      • 1970-01-01
      • 1970-01-01
      • 2017-01-24
      • 1970-01-01
      • 2021-04-16
      • 1970-01-01
      相关资源
      最近更新 更多