繁体   English   中英

MVC下拉列表未选择默认值

[英]MVC Dropdownlist not selecting default value

我已经搜索了很多这个问题,并且看到了许多修复程序,但是似乎没有一个对我有用。 我想为dropdownlist设置默认值,因为当我要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' ...

为什么不尝试使用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,而不是整个对象,因为selected属性基于“ Id”。 因此,将是这样的:

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

您说过您尝试过:

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

但是,您使用“ Id”作为dataValueField并使用“ persoon”对象中的“ PartnerId”,这使我相信来自“ persoon.PartnerId”的ID不在“ simpleList”对象中。 请看一下以确认。

我已经对其进行了测试,并且效果很好。 周末愉快。 问候。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM