19

これが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には値があります。ただし、ページが Posts back する場合、その値は常に0です。

4

2 に答える 2

26

すべての変数 (およびコントロール) は、ページのライフサイクルの最後に破棄されます。したがって、変数を永続化する方法が必要です。たとえば、ViewState.

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

MSDN マガジンの記事「ASP.NET アプリケーションで永続的なユーザー状態を管理するための 9 つのオプション」は役に立ちますが、MSDN Web サイトでは表示できなくなりました。これは 2003 年 4 月版で、Windows ヘルプ ファイル (.chm) としてダウンロードできます。(プロパティを表示して、「これはインターネットからダウンロードされたものです」のブロックを解除することを忘れないでください。そうしないと、記事を表示できません。)

于 2013-02-19T14:42:41.513 に答える
3

ビューステートを使用するようにプロパティを変更します

int departmentID = 0;
public int DepartmentID
{
  get { 
         if(ViewState["departmentID"]!=null)
         { departmentID = Int32.Parse(ViewState["departmentID"]); }; 
         return departmentID;
      }
  set { ViewState["departmentID"] = value; }
}
于 2013-02-19T14:42:35.560 に答える