MVCにおけるDropDownListForのバグについて

4396 ワード

次のコードがあります.
 1 //   
 2 ViewData["source_type"] = new List<SelectListItem>
 3             {
 4                 new SelectListItem() {Text = " 1", Value = "1"},
 5                 new SelectListItem() {Text = " 2", Value = "2"},
 6                 new SelectListItem() {Text = " 3", Value = "3"},
 7                 new SelectListItem() {Text = " 4", Value = "4"}
 8             };
 9             return View(new thr_channel_commodity_report { source_type = 4 });
10 //
11 @Html.DropDownListFor(x=>x.source_type,ViewData["source_type"] as IEnumerable<SelectListItem>)

ViewDateを使用してデータを転送し、「source_type」という名前を使用すると、ページのドロップダウン・ボックスに現在のmodel値が正しく表示されません.
理由:
private static MvcHtmlString SelectInternal(this HtmlHelper htmlHelper, string optionLabel, string name, IEnumerable<SelectListItem> selectList, bool allowMultiple, IDictionary<string, object> htmlAttributes)
 :
if (!usedViewData) {
                if (defaultValue == null) {
                    defaultValue = htmlHelper.ViewData.Eval(fullName);
                } 
            }
 
htmlHelper.ViewData.Eval(fullName);

このEvalには問題がある.このセグメントコードは、ViewDataを使用してデータを転送するときに、最初のパラメータ式の名前と同じ名前で取得された値が、配列全体であるためです.ViewData[source_type 2]を使用する場合は、式の名前と異なるだけでよい
推奨事項:
1、ViewデータまたはView Bagを使用してDropDownListにデータを渡さない
2、ViewDataを使用する必要がある場合は、名前非式名を使用します.