我已经搜索了很多这个问题,看过很多修复,但似乎没有一个对我有用。
我想为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'
...
答案 0 :(得分:0)
为什么不尝试使用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。
答案 1 :(得分:-2)
问题在于:
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”作为dataValueField并使用“persoon”对象中的“PartnerId”,这让我相信来自“persoon.PartnerId”的Id不在“simpleList”对象中。请看一下确认。
我测试了它,它工作得很好。周末愉快。问候。