4

ビューに以下のコードがあります。(index.cshtml)

バインディングの問題

  • 最初のドロップダウンは、'ChildItem' エディター テンプレートに基づいて正しい値を選択します。
  • インライン ドロップダウン リストを使用した 2 番目の例は機能しません。ドロップダウン値を表示するためだけにエディター テンプレートを作成したくありません。
  • 奇妙なことに、TextBoxFor は正しい値を表示します。これは、ドロップダウン リストだけの問題のようです。

2 番目のドロップダウンが機能するようにバインドを修正するにはどうすればよいですか? デバッグしました。ViewData.Eval が から正しい値を取得していないようです_.Children[i].ChooseId

更新 (バグ)これは、MVC フレームワークhttp://aspnet.codeplex.com/workitem/8311
で確認されたバグ (優先度が低い、どうやって?) です。

@using (Html.BeginForm())
{
    for (int i = 0; i < Model.Children.Count(); i++)
    {
       <p>A: @Html.EditorFor(_ => _.Children[i], "ChildItem")</p>
       <p>B: @Html.DropDownListFor(_ => _.Children[i].ChooseId, TestModel.PeopleSelect)</p>
    }
    <button type="submit">GO</button>
}

を使用してみましたがDropDownListFor(_ => Model.Children[i].ChooseId)、同じ結果です。
usingTextBoxFor(_ => _.Children[i].ChooseId)は正しい値を示しています

参考までにこちらChildItem.cshtml

@using dropdown.Controllers
@using dropdown.Models
@model dropdown.Models.TestPerson
@Html.DropDownListFor(_ => _.ChooseId, TestModel.PeopleSelect)

次のようになります。

A は機能しますが、B は機能しません。

4

2 に答える 2

2

私はその後これを見つけました:http://aspnet.codeplex.com/workitem/8311 これは確認されたバグです。

私が見つけた唯一の回避策はこれです。

選択したアイテムにマークを付ける

@Html.DropDownListFor(_ => _.Children[i].ChooseId, Mark(TestModel.PeopleSelect, Model.Children[i].ChooseId))

マーク機能/拡張方法

@functions {
    private IEnumerable<SelectListItem> Mark(IEnumerable<SelectListItem> items, object Id)
    {
        foreach (var item in items)
            if (string.CompareOrdinal(item.Value, Convert.ToString(Id)) == 0)
                item.Selected = true;
        return items;
    }
}
于 2013-02-19T11:39:27.403 に答える