Asp.net mvc 使用下拉列表将表单绑定到列表。为下拉列表绑定失败1路
我有一个动作叫做sessions。在这个操作中,我从一个表单创建“sessions”对象。如果它们不存在,我会将它们添加到数据库中,如果已经有会话对象连接到“Reeksen”对象,我会将“会话”加载到表单中,以便对其进行编辑。因此,我有一个创建和编辑在1和相同的形式 此外,“Reeksen”具有预定义数量的“session”,不能更改。因此,我让用户一次完成所有“会话”(因为会话的数量将从1到10) 所以,在我的代码中是这样的:Asp.net mvc 使用下拉列表将表单绑定到列表。为下拉列表绑定失败1路,asp.net-mvc,asp.net-mvc-2,drop-down-menu,selectlist,Asp.net Mvc,Asp.net Mvc 2,Drop Down Menu,Selectlist,我有一个动作叫做sessions。在这个操作中,我从一个表单创建“sessions”对象。如果它们不存在,我会将它们添加到数据库中,如果已经有会话对象连接到“Reeksen”对象,我会将“会话”加载到表单中,以便对其进行编辑。因此,我有一个创建和编辑在1和相同的形式 此外,“Reeksen”具有预定义数量的“session”,不能更改。因此,我让用户一次完成所有“会话”(因为会话的数量将从1到10) 所以,在我的代码中是这样的: int antses =
int antses = m.Mod_AantalSessies.Value;
List<List<SelectListItem>> lpllst = new List<List<SelectListItem>>(antses);
List<FlatSessie> sl = new List<FlatSessie>(antses);
Reeksen rks = _db.Reeksens.First(r => r.Rks_ID == id)
...
List<Sessies> sesl = rks.Sessies.ToList();
for (int i = 0; i < antses; i++) {
sl.Add(Mapper.Map<Sessies, FlatSessie>(sesl[i]));
lpllst.Add(MvcApplication.lesplaatsList(schooljaarparam, sesl[i].Ses_Lpl_ID));
}
...
ViewData["lesplist"] = lpllst;
ViewData["lglist"] = MvcApplication.lesgeverList();
return View(sl);
int antses=m.Mod_AantalSessies.Value;
列表lpllst=新列表(antses);
列表sl=新列表(antses);
Reeksen rks=\u db.Reeksens.First(r=>r.rks\u ID==ID)
...
List sesl=rks.sessions.ToList();
for(int i=0;i
以及lesgeverlist()方法
公共静态列表lesgeverList(){
NASDataContext _db=新的NASDataContext();
var lesg=(从l in_db.Lesgevers
l.LG_Naam!=“leeg”
l.LG_Naam订购
选择l).toselect(m=>m.LG_-Naam+“”+m.LG_-Vnaam,m=>m.LG_-ID.ToString(),m=>m.LG_-ID<-1);
返回lesg.ToList();
}
现在的问题是:
这一切都非常有效。列表转到ASPX,我得到表单的次数与列表中的项目一样多,回发也可以工作,解析也可以进行,一切都可以。所以,除了一点:下拉列表外,其他都很好
通常在MVC中,我不会为SelectList或List设置任何选定值,因为他们不需要它。在编辑页面中,MVC会将这些选定项本身设置为绑定
然而,现在,在Foreach循环中的表单中,除了下拉框之外,所有字段都被填充,这些字段不接收其“初始值”
但是,当我将列表中的项目设置为选中时,它确实会在表单中被选中。(从ViewData[“lesplist”]中可以看到),但当我发送一个没有选定值的普通列表时,模型绑定器不会将该字段的给定值传播到下拉列表的selectedvalue
但是,当我提交表单并返回视图(因为验证失败)时,下拉列表会保留其值
这是可以修复的,还是只是MVC2中的一个缺陷?
答案是:)我在将地块保存到DB时也遇到问题:
namespace MVC2_NASTEST.Models {
public partial class FlatSessie {
public int Ses_ID { get; set; }
public int Ses_Nummer { get; set; }
public string Ses_Datum { get; set; }
public string Ses_Beginuur { get; set; }
public string Ses_Einduur { get; set; }
public int Ses_Lpl_ID { get; set; }
public int Ses_Rks_ID { get; set; }
public int Ses_LG_ID { get; set; }
}
}
int antses = m.Mod_AantalSessies.Value;
List<List<SelectListItem>> lpllst = new List<List<SelectListItem>>(antses);
List<FlatSessie> sl = new List<FlatSessie>(antses);
Reeksen rks = _db.Reeksens.First(r => r.Rks_ID == id)
...
List<Sessies> sesl = rks.Sessies.ToList();
for (int i = 0; i < antses; i++) {
sl.Add(Mapper.Map<Sessies, FlatSessie>(sesl[i]));
lpllst.Add(MvcApplication.lesplaatsList(schooljaarparam, sesl[i].Ses_Lpl_ID));
}
...
ViewData["lesplist"] = lpllst;
ViewData["lglist"] = MvcApplication.lesgeverList();
return View(sl);
public static List<SelectListItem> lesgeverList() {
NASDataContext _db = new NASDataContext();
var lesg = (from l in _db.Lesgevers
where l.LG_Naam != "leeg"
orderby l.LG_Naam
select l).ToSelectList(m => m.LG_Naam + " " + m.LG_Vnaam, m => m.LG_ID.ToString(), m => m.LG_ID < -1);
return lesg.ToList();
}