5

ASP.NET MVC v1 のバグを処理するコントローラーで回避策を作成しようとしています。このバグは、何も選択されていないリストボックスを投稿すると発生します ( http://forums.asp.net/p/1384796/2940954.aspx )。

簡単な説明: テキスト ボックスからの 2 つの日付と、リスト ボックスからの 1 つ以上の選択を受け入れるレポートがあります。リストボックスが何も選択されていない場合、検証を除いてすべてが機能します。

フォームが投稿されてコントローラーに到達すると、モデルには必要なすべての項目が含まれます。ただし、ModelState にはリストボックスのキー/値が含まれていません。解決するために、私はこのようなことがうまくいくことを望んでいました:

if (!ModelState.ContainsKey("TurnTimeReportModel.Criteria.SelectedQueuesList") || ModelState["TurnTimeReportModel.Criteria.SelectedQueuesList"] == null) {
            ModelState.Keys.Add("TurnTimeReportModel.Criteria.SelectedQueuesList");
            ModelState["TurnTimeReportModel.Criteria.SelectedQueuesList"].Equals(new List<string>());
        }

残念ながら、キーを追加しようとすると、次の例外がスローされます: System.NotSupportedException: ディクショナリから派生したキー コレクションの変更は許可されていません。

何か案は?

前もって感謝します!

4

2 に答える 2

5

ModelState.Addメソッドを直接使用します。

ModelState.Add("TurnTimeReportModel.Criteria.SelectedQueuesList", 
               new ModelState{ AttemptedValue = new List<string>() } )
于 2010-01-28T19:20:45.530 に答える
3

私はトリックを行った次のようになりました:

            if (ModelState.ContainsKey("TurnTimeReportModel.Criteria.SelectedQueuesList") && ModelState["TurnTimeReportModel.Criteria.SelectedQueuesList"] == null) {
            ModelState["TurnTimeReportModel.Criteria.SelectedQueuesList"].Value = new ValueProviderResult("", "", CultureInfo.CurrentUICulture);
        } else if (!ModelState.ContainsKey("TurnTimeReportModel.Criteria.SelectedQueuesList")) {
            ModelState.Add("TurnTimeReportModel.Criteria.SelectedQueuesList", new ModelState{Value = new ValueProviderResult("","",CultureInfo.CurrentUICulture)});
        }
于 2010-01-28T20:38:37.190 に答える