2

ドロップダウンリストの項目が選択されていないという問題があります。SelectListItemsの配列を作成し、正しいものをselected = trueに設定していますが、選択されていません。

コントローラに次のコードがあります。

    public ActionResult Edit(int id)
    {
        var p = _myRepository.FindBy(id);
        var vm = new MyViewModel(p) { CategoryTypes = ControllerUtils.GetList(_myTypeRepository, r => r.Name, p.CategoryType.Id) };

        return View(vm);
    }

ControllerUtilsクラスのGetList関数は次のとおりです。

public static class ControllerUtils
{
    public static IEnumerable<SelectListItem> GetList<T>(IIntKeyedRepository<T> list, Func<T, string> getName, int id) where T : BaseModel
    {
        var items = list.All().ToList();
        var itemsList = items.Select(r => new SelectListItem() { Selected = r.Id == id, Text = getName(r), Value = r.Id.ToString() });
        return itemsList;
    }
}

これが私のビューコードです:

    <div class="editor-label">
        @Html.LabelFor(model => model.MyObject.CategoryType)
    </div>
    <div class="editor-field">
        @Html.DropDownListFor(model => model.MyObject.CategoryType, Model.CategoryTypes)
        @Html.ValidationMessageFor(model => model.MyObject.CategoryType)
    </div>

コントローラコードでデバッグし、SelectListItemオブジェクトの配列にリストすると、2番目の項目が選択されていることがわかります=true。しかし、ビューHTMLを確認すると、どちらの項目も選択されていません。

<select id="CategoryType" name="CategoryType">
  <option value="1">Choice 1</option>
  <option value="2">Choice 2</option>
</select>

ご覧のとおり、どちらのアイテムにも「selected = "selected」はありません。ここで何が起こっているのかについて何か提案はありますか?

4

2 に答える 2

4

DropDownListFor ヘルパーの最初の引数は、選択した値を含むビュー モデルのプリミティブ型プロパティを指すラムダ式である必要があります。

@Html.DropDownListFor(
    model => model.MyObject.CategoryType.Id, 
    Model.CategoryTypes
)

内のSelected = r.Id == idプロパティを削除しますSelectListItem。あなたはそれを必要としません。Model.MyObject.CategoryType.Idヘルパー内に一致する値を持つ対応するアイテムがあると仮定するとModel.CategoryTypes、このアイテムが自動的に事前選択されます。

于 2012-10-20T16:55:47.873 に答える
1

SelectListItem.Selectedプロパティを使用して、どの項目が選択されているかを判断しないでください。DropDownListForこれを無視していることに気づきました。

代わりに、ドロップダウンで 2 番目の項目を選択するにはmodel.MyObject.CategoryType、値2(または) を設定する必要があります。"2"

于 2012-10-20T16:36:23.060 に答える