Asp.net mvc 使用下拉列表将表单绑定到列表。为下拉列表绑定失败1路

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 =

我有一个动作叫做sessions。在这个操作中,我从一个表单创建“sessions”对象。如果它们不存在,我会将它们添加到数据库中,如果已经有会话对象连接到“Reeksen”对象,我会将“会话”加载到表单中,以便对其进行编辑。因此,我有一个创建和编辑在1和相同的形式

此外,“Reeksen”具有预定义数量的“session”,不能更改。因此,我让用户一次完成所有“会话”(因为会话的数量将从1到10)

所以,在我的代码中是这样的:

                    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();
        }