1

私のフォームでは、2 つの異なる保存方法があります。

「保存」は、ポストバックを通じてユーザーの入力をリストに保存し、保存の成功を確認する jQueryUI ポップアップ ダイアログの後にさらにデータを入力できるようにします。

「SaveClose」は、ポストバックを通じてユーザーの入力をリストに保存し、コンテキスト バックアウトを実行してリスト ページに戻ります。

私の問題は、ユーザーが「保存」してから「SaveClose」を実行すると、保存するたびに新しいリスト項目が作成され、2 つの項目が作成されることです。

コードでは、これが発生することは明らかです。

        public void SaveClose_Click(object sender, EventArgs e)
        {
            _ControlBinder.SaveToList(CurrentMode.Equals(FormMode.New), delegate(...) { ...}); Backout();
        }
        public void Save_Click(object sender, EventArgs e)
        {
            _ControlBinder.SaveToList(CurrentMode.Equals(FormMode.New), delegate(...) { ... });
            ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "tmp", "$(\"#savedDialog\").dialog(open);", true);
        }

単に「保存」をクリックすると、フォームはリストに保存されますが、FormMode は変更されません。ChangeMode機能 を見つけましたが、機能させることができませんでした。

C# コードビハインドを使用してフォームのモードを変更する方法はありますか? (または、CurrentMode.Equals(FormMode.New) 以外に使用できるより良い条件)

4

1 に答える 1

0

重複が作成されたリストを最初にチェックし、SaveToList が true になる前に同じタイトルの別のドキュメントが存在しないことを確認するためのより良い条件を構築しました。

新しい条件は次のとおりです。

(CurrentMode.Equals(FormMode.New) && found.Count == 0)

Where found は、LINQ ステートメントによって作成されます。

        SPList list = SPContext.Current.Web.Lists["ListName"];
        SPQuery query = new SPQuery();
        query.Query = @"
            <Where>
                <Eq>
                <FieldRef Name='Title' />
                <Value Type='Text'>" + Variable.ToString() + "</Value></Eq></Where>";
        SPListItemCollection found = list.GetItems(query);

FormMode を「New」ではなく「Edit」に変更するだけのソリューションを引き続き探しますが、LINQ ソリューションは重複が作成されないようにします。

于 2012-07-11T20:04:45.747 に答える