MVC下拉列表没有选择默认值

本文关键字:默认值 有选择 下拉列表 MVC | 更新日期: 2023-09-27 18:14:23

我已经为这个问题搜索了很多,并且已经看到了许多修复,但似乎没有一个适合我。我想为dropdownlist设置一个默认值,因为当我想编辑一个人时,合作伙伴的下拉列表总是转到默认文本'select a partner',当我想保存对这个人的更改时,我要么必须记住这个人有什么合作伙伴并再次选择他,要么合作伙伴只是在数据库中更改为null

我现在的代码是:

控制器:

    // GET: /Persoon/Edit/5
    [Authorize(Roles = "Beheerder")]
    public ActionResult Edit(int id)
    {
        var persoon = _persoonBll.GetById(id);
        if (persoon == null)
        {
            return RedirectToAction("Index");
        }
        var persoonViewModel = new PersoonDetailViewModel()
        {
            PersoonID = persoon.PersoonID,
            Voornaam = persoon.Voornaam,
            Naam = persoon.Naam,
            GSM = persoon.GSM,
            Email = persoon.Email,
            Telefoon = persoon.Telefoon,
            PartnerID = persoon.PartnerID
        };
        //generate list of partners
        var PossiblePartners= _persoonBll.GetPossiblePartnersForPersoon(persoon).ToList();

        //generate views for possible partners
        IEnumerable<SimplePersoonViewModel> simpleList = CreateSimplepPersoonForList(PossiblePartners);

        ViewBag.PossiblePartners= new SelectList(simpleList, "Id", "Fullname");

        ... more code
     }
下面是生成列表的代码:
    private IEnumerable<SimplePersoonViewModel>     CreateSimplepPersoonForList(List<Persoon> lstPersons)
    {
        var lstSimplePersons = new List<SimplePersoonViewModel>();
        lstPersons.ToList().ForEach(p => lstSimplePersons.Add(new SimplePersoonViewModel() { Id = p.PersoonID, Fullname = p.FullName }));
        return lstSimplePersons;
    }

simpleList是我创建用来填充dropdownlist的列表。这很好。

HTML:

   <div class="form-
       <p>
           <%: Html.DisplayFor(model => model.Partner.FullName) %>
       </p>
       <%: Html.DropDownList("PartnerID",
              (IEnumerable<SelectListItem>)ViewBag.PossiblePartners,
                          "--- Choose a partner ---",  
                                 new { @class="chosen-select"})%>
       <%: Html.ValidationMessageFor(model => model.PartnerID) %>
   </div>

我已经尝试了不同的方法,其中之一是:

ViewBag.PossiblePartners= new SelectList(simpleList, "Id", "Fullname", persoon.PartnerId);

但无论我做什么或尝试,dropdownlist一直显示'Choose a partner'

MVC下拉列表没有选择默认值

为什么不尝试使用ViewModel和SelectListItem呢?我会这样做

控制器:

Model.Partners = partnerList.Select(partner => new SelectListItem
{
    Text = partner.FullName,
    Value = partner.Id
}).ToList();
HTML:

@Html.DropDownListFor(m => m.PartnerId, new SelectList(Model.Partners, "value", "text"), "--- Choose a partner ---", new { @class = "chosen-select"})

PartnerId应该是string。然后你只需要设置PartnerId

问题在:

 ViewBag.PossiblePartners = new SelectList(simpleList, "Id", "Fullname");

还有第四个参数是选中的值,因此,您必须将存在的元素Id传递给它。值得一提的是,这是Id而不是整个对象,因为选中的属性是基于"Id"的。所以,它应该是这样的:

ViewBag.PossiblePartners = new SelectList(simpleList, "Id", "Fullname", selectedElement.Id);

你说过你试过了:

ViewBag.PossiblePartners= new SelectList(simpleList, "Id", "Fullname", persoon.PartnerId);

但是您使用"Id"作为datavalufield并使用来自"persoon"对象的"PartnerId",这使我相信Id来自"persoon"。"PartnerId"不在"simpleList"对象中。

我已经测试过了,它工作得很好。周末愉快。问候。