【问题标题】:User control's property loses value after a postback用户控件的属性在回发后失去价值
【发布时间】:2013-02-04 06:55:33
【问题描述】:

这是 HTML。我有一个包含用户控件的转发器。

<asp:Repeater ID="rpNewHire" runat="server">
 <HeaderTemplate>
  <table>            
 </HeaderTemplate>
 <ItemTemplate>
  <tr>
     <td>
         <user:CKListByDeprtment ID = "ucCheckList" 
          DepartmentID= '<%# Eval("DepID")%>' 
          BlockTitle = '<%# Eval("DepName")%>' 
          runat = "server"></user:CKListByDeprtment>
     </td>
   </tr>
  </ItemTemplate>
  <FooterTemplate>
   </table>
  </FooterTemplate>
</asp:Repeater>

DepartmentID 是我在用户控件 中定义的属性。

int departmentID;

public int DepartmentID
{
  get { return departmentID; }
  set { departmentID = value; }
}

这就是我尝试访问它的方式

protected void Page_Load(object sender, EventArgs e)
{
   int test = departmentID;
}

第一次加载页面时,departmentID 有一个值。但是,当页面回发时,该值始终为 0

【问题讨论】:

    标签: asp.net data-binding user-controls


    【解决方案1】:

    所有变量(和控件)都在页面生命周期结束时处置。所以你需要一种方法来持久化你的变量,例如在ViewState.

    public int DepartmentID
    {
        get {
            if (ViewState["departmentID"] == null)
                return int.MinValue;
            else 
                return (int)ViewState["departmentID"]; 
        }
        set { ViewState["departmentID"] = value; }
    }
    

    MSDN 杂志文章“在 ASP.NET 应用程序中管理持久用户状态的九个选项”很有用,但在 MSDN 网站上不再显示。它在 2003 年 4 月版中,您可以download as a Windows Help file (.chm)。 (不要忘记调出属性并取消阻止“这是从互联网上下载的”的东西,否则您无法查看文章。)

    【讨论】:

    • 有道理。我在全班使用变量部门ID。我改用什么?属性,即 DepartmentID?
    • @Richard77:是的,这就是为什么你应该更喜欢属性而不是字段的原因。您可以稍后更改实现。使字段始终为私有。
    • 有道理。难怪,了解 ASP.NET 页面的生命周期是求职面试中最关心的问题之一。非常感谢。
    【解决方案2】:

    更改您的属性以使用视图状态

    int departmentID = 0;
    public int DepartmentID
    {
      get { 
             if(ViewState["departmentID"]!=null)
             { departmentID = Int32.Parse(ViewState["departmentID"]); }; 
             return departmentID;
          }
      set { ViewState["departmentID"] = value; }
    }
    

    【讨论】:

    • 如果ViewState["departmentID"] 为空,这将失败。编辑:编辑后它仍然会爆炸;)
    猜你喜欢
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 2014-07-09
    相关资源
    最近更新 更多