1

ASP.Net プロジェクトに LitHoldModifications というクラスを作成しました。コードは次のとおりです。

[Serializable]
public class LitHoldModifications
{
    private Boolean _changed;
    private Hashtable _added;
    private Hashtable _deleted;

    public Boolean Changed
    {
        get { return _changed; }
        set { _changed = value; }
    }

    public Hashtable Added
    {
        get { return _added; }
        set { _added = value; }
    }

    public Hashtable Deleted
    {
        get { return _deleted; }
        set { _deleted = value; }
    }

    public Hashtable Add(String item1, String item2)
    {
        Added = new Hashtable();
        Added.Add(item1, item2);
        return Added;
    }

    public Hashtable Delete(String item1, String item2)
    {
        Deleted = new Hashtable();
        Deleted.Add(item1, item2);
        return Deleted;
    }
}

私が抱えている問題は、このクラスのインスタンスに複数のアイテムを追加できる必要があることです。これを行う必要があるコードは次のとおりです (aspx ページ内):

public LitHoldModifications AffectedEmployeeModifications
    {
        get
        {
            if (ViewState["AffectedEmployeeModifications"] != null)
                return (LitHoldModifications)ViewState["AffectedEmployeeModifications"];
            else
                return null;
        }

        set
        {
            ViewState["AffectedEmployeeModifications"] = value;
        }
    }

protected void ProcessAffectedviaJavascript()
    {
       string[] employees = HiddenEmployeesPopup.Value.Split('|');
       if (employees.Length>1) {
        foreach (string s in employees)
        {
            if (s.Length > 1)
            {

                string Anumber = s.Split('@')[0];
                string AName = s.Split('@')[1];

                ListItem item = new ListItem();
                item.Text = AName;
                item.Value = Anumber;
                lstSelEmployees.Items.Add(item);

                //Clear values in temp hidden field:
                HiddenEmployeesPopup.Value = "";

                AffectedEmployeeModifications.Add(Anumber, AName);
                AffectedEmployeeModifications.Changed = true;

            }

         }

       }

コードを実行して ProcessAffectedviaJavascript() に到達すると、string[] の従業員に複数の名前が入力されますが、コードが AffectedEmployeeModifications.Add... の行に到達するたびに、新しいハッシュテーブルが作成され、Add メソッドによって返されます。であるため、AffectedEmployeeModifications に追加された従業員からの以前の文字列は失われます。これを回避する唯一の方法は、Add メソッドを変更して AffectedEmployeeModifications をパラメーターとして受け取り、次のようにすることです。

public Hashtable Add(Hashtable lhm, String item1, String item2)
    {
        lhm.Add(item1, item2);
        return lhm;
    }

そして、私のaspx.csで:

AffectedEmployeeModifications = AffectedEmployeeModifications.Add(AffectedEmployeeModifications, Anumber, AName);

これは OOP のようには見えませんが、私の OOP スキルは明らかに不足しています。どうすればいいですか?

4

1 に答える 1