3

この質問は何度も出されているようです。しかし、これは私を夢中にさせています。

これは私の(単純化された)モデルです。

public class UserEditModel
{
    [Required]
    public string Title { get; set; }

    private IEnumerable<SelectListItem> _titleList;
    public IEnumerable<SelectListItem> TitleList
    {
        get { return _titleList.Select(x => new SelectListItem {
                            Selected = (x.Value == Title), 
                            Text = x.Text,
                            Value = x.Value
                        });
        }
        set { _titleList = value; }
    }
}

メンバー内のそれぞれのTextおよびValueプロパティは同一です。例えば:SelectListItemTitleList

new SelectListItem { Text = "Mr", Value = "Mr"  }

次のコードが投稿されると、正しいTitle値がモデルにバインドされますが、POST または GET に応答してモデルがビューにプッシュされるたびに、すべてのインテリセンスが表示されても、選択された値がドロップダウン リストに設定されません。正しい値が存在すること。

@Html.DropDownListFor(x => x.Title, Model.TitleList)

いくつかの記事といくつかのSOの回答に基づいてコードが正しいことを確認したので、困惑しています。

助言がありますか?

アップデート:

完全を期すために、これはアクションとサポート方法です:

[HttpGet]
public ActionResult Edit(int id)
{
    var user = _userService.Get(id);

    var model = new UserEditModel()
    {
        ...
        Title = user.Title,
        TitleList = ListTitles()
    };

    return View(model);
}

private IEnumerable<SelectListItem> ListTitles()
{
    var items = new[] {
            new SelectListItem() {Text = "Mr", Value = "Mr" },
            new SelectListItem() {Text = "Mrs", Value = "Mrs"},
            new SelectListItem() {Text = "Ms", Value = "Ms"},
            new SelectListItem() {Text = "Miss", Value = "Miss"},
            new SelectListItem() {Text = "Professor", Value = "Professor"},
            new SelectListItem() {Text = "Dr", Value = "Dr" }
        };

    return items;
}

ご覧のとおり、空想的なものは何もなく、単純な実装です。

4

3 に答える 3