0

非常によく似た動作の 3 つのページがあるため、3 つの動作を持つユーザー コントロールを作成しました。列挙型とこの列挙型のプロパティを追加してこれを行いました。

public enum ucType
    { 
        CustomersWhoHaveAContract, CustomersWaitingForContract, CustomerOfPreReservedContracts
    }

    public ucType UserControlType;

    protected void BtnLoadInfo_Click(object sender, ImageClickEventArgs e)
    {
        switch (UserControlType)
        {
            case ucType.CustomersWhoHaveAContract:
                DoA();
                break;
            case ucType.CustomersWaitingForContract:
                DoB();
                break;
            case ucType.CustomerOfPreReservedContracts:
                DoC();
                break;
            default:
                break;
        }

私のページでは、UserControlType に値を割り当てます。

protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            ucCustomersWithContract1.UserControlType = UserControls.ucCustomersWithContract.ucType.CustomerOfPreReservedContracts;
        }
    }

しかし、ボタンをクリックすると、 UserControlType は常にCustomersWhoHaveAContractになります。つまり、値が失われます。問題はどこだ?

4

1 に答える 1

0

ASP.NET WebForms のことですね。
コントロールはすべてのデータを自動的に復元するわけではありません。ViewState メカニズムがあります。

MSDN の記事
http://msdn.microsoft.com/en-us/library/ms972976.aspx

例を修正するには、フィールドをプロパティに変更します。

public ucType UserControlType {
   set {
      ViewState["UserControlType"] = value; 
   }
   get { 
      object o = ViewState["UserControlType"]; 
      if (o == null)
         return ucType.CustomersWhoHaveAContract; // default value
      else 
         return (ucType)o; 
   }
}

そしてそれはうまくいくはずです。

于 2012-11-01T11:15:39.180 に答える