MVCにおけるDropDownListForのバグについて
4396 ワード
次のコードがあります.
ViewDateを使用してデータを転送し、「source_type」という名前を使用すると、ページのドロップダウン・ボックスに現在のmodel値が正しく表示されません.
理由:
このEvalには問題がある.このセグメントコードは、ViewDataを使用してデータを転送するときに、最初のパラメータ式の名前と同じ名前で取得された値が、配列全体であるためです.ViewData[source_type 2]を使用する場合は、式の名前と異なるだけでよい
推奨事項:
1、ViewデータまたはView Bagを使用してDropDownListにデータを渡さない
2、ViewDataを使用する必要がある場合は、名前非式名を使用します.
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を使用する必要がある場合は、名前非式名を使用します.