【问题标题】:Asp.Net: Problem setting property value in UserControlAsp.Net:在 UserControl 中设置属性值的问题
【发布时间】:2009-12-18 09:27:30
【问题描述】:

我有一个名为“Inspirations”的用户控件,具有以下公共属性

private int pagenumber;
public int PageNumber
{

    get { return pagenumber; }
    set { pagenumber = value; }

}

在我的 aspx 页面上,我这样设置属性的值:

Inspirations.PageNumber = (int)Convert.ToInt32(this.txtNum.Text);

在我的 aspx 页面上,我写回该值以检查其是否已设置:

Response.Write(Inspirations.PageNumber.ToString());

...它在我的 aspx 页面上。

但是,我的 UserControl 上有一个按钮来测试 PageNumber 的值,当我单击它时它总是返回为零。

protected void btnAddCompany_Click(object sender, EventArgs e)
{
    Response.Write(PageNumber.ToString());
}

...属性值似乎没有传回我的控件。

谁能告诉我我做错了什么,拜托。

问候 融化

【问题讨论】:

  • 您在页面生命周期的哪个位置设置值,您在页面生命周期的哪个位置读取它?

标签: asp.net user-controls


【解决方案1】:

你需要将值持久化在 ViewState 或 SessionState 中:

例如:

public int PageNumber
        {
            get
            {
                if (ViewState["PageNumber"] == null || ViewState["PageNumber"].ToString().Trim() == String.Empty)
                {
                    ViewState["PageNumber"] = 0;
                }
                return Int32.Parse(ViewState["PageNumber"].ToString().Trim());
            }
            set
            {
                ViewState["PageNumber"] = value;
            }
        }

【讨论】:

    【解决方案2】:

    您的按钮单击将通过回发进行操作,这意味着仍将调用 ASP.NET 页面生命周期中的其他方法(例如 OnInit()、OnLoad())。

    如果您在其中之一中设置 PageNumber,它将在浏览器到达您的按钮单击处理程序之前删除从浏览器设置的值。

    在设置属性/字段值之前检查 IsPostBack 属性以防止这种情况发生。

    【讨论】:

      【解决方案3】:

      aspx 页面中的事件/阶段序列包括以下内容(这是部分列表):

      1. OnInit(首先是控件,然后是页面)
      2. OnLoad(首先是页面,然后是控件)
      3. 控制事件(例如按下按钮)
      4. 预渲染
      5. 渲染

      您在事物的标记方面拥有的任何代码都会在渲染阶段被调用。

      一般来说,调用Response.Write() 是不安全的,除非在渲染期间。如果您在此之前调用它,任何输出都将出现在您的所有标记之前。

      因此,您的问题的答案是:首先,这一切都需要在同一个请求期间发生,因为仅存储公共属性不会在请求之间保持值。接下来,确保在生命周期的早期设置属性(通常是 OnLoad)。接下来,不要使用Response.Write() 来输出结果。设置<asp:Label> 控件的值,或类似的东西。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多