1

模型:

public partial class BookModel : BaseNopEntityModel, 
               ILocalizedModel<BookLocalizedModel>
{
   public int TranslatorId { get; set; }
   public IList<SelectListItem> AvailableTranslators { get; set; }
}

控制器:

public ActionResult Edit(int id)
{

    var bookTranslators = _customerService.GetAllTranslators();
    foreach (var item in bookTranslators)
    {
        model.AvailableTranslators.Add(new SelectListItem()
        {
            Text = item.Nickname,
            Value = item.Id.ToString(),
            Selected = item.Nickname == model.Translator
         });
    }   
    return View(model);
}

Model.AvailableTranslators 确实有一项 selected = true 但未能在视图中将其显示为默认值。我究竟做错了什么 ?

如何将 selectedItem 显示为默认值?

看法:

@model BookModel 
@Html.DropDownListFor(model => model.TranslatorId, Model.AvailableTranslators)

更新:我将数据类型 TranslatorId 更改为字符串

public string TranslatorId { get; set; }

现在下拉列表显示正确的默认值,只是不知道为什么?

4

1 回答 1

2

您需要将您的 AvailableTranslators 集合包装成SelectList

尝试这个:

@Html.DropDownListFor(s => s.TranslatorId,
                       new SelectList(ViewBag.AvailableTranslatators,
                                      "Value","Text",@Model.TranslatorId
                                     ), 
                    new {})

所以基本上,一个 SelectList 接受以下内容:

new SelectList(SelectListItemCollection, ValueFieldName, DataFieldName, 
               SelectedValue);

您可能想重新查看我给出的 SelectedValue 字段。看看这是否应该是,但你的想法对吗?

至于,为什么它在绑定到简单的 SelectListItem 列表时不起作用,请阅读此问题的所有答案

于 2013-11-12T09:00:03.953 回答