我有一個名爲Sessies的操作。在這個動作中,我從表單創建'Sessies'對象。如果它們不存在,我將它們添加到數據庫中,如果已經有Sessies對象連接到'Reeksen'對象,則將'Sessies'加載到窗體中以便可以對它們進行編輯。所以我有一個創建和編輯1和相同的形式。使用下拉列表將模型綁定到列表。綁定失敗1下拉方式
而且,「Reeksen」具有不能改變「Sessies」的預定義數目。所以我讓用戶使所有「Sessies」在一個時間(COS sessies量將是從1到10)
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<List<MVC2_NASTEST.Models.FlatSessie>>" %>
...
<h2>
Sessies</h2>
<% using (Html.BeginForm()) {%>
<%= Html.ValidationSummary(true) %>
<fieldset>
<legend>Fields</legend>
<% for (int i = 0; i < Model.Count; i++) { %>
<%= Html.HiddenFor(model => model[i].Ses_ID)%>
<%= Html.HiddenFor(model => model[i].Ses_Rks_ID)%>
<div class="editor-label">
<%= Html.LabelFor(model => model[i].Ses_Nummer)%>
</div>
<div class="editor-field">
<%= Html.HiddenFor(model => model[i].Ses_Nummer)%>
<%= Html.Label(Model[i].Ses_Nummer.ToString())%>
</div>
....
<div class="editor-label">
<%= Html.LabelFor(model => model[i].Ses_LG_ID)%>
</div>
<div class="editor-field">
<%= Html.DropDownListFor(model => model[i].Ses_LG_ID, MVC2_NASTEST.MvcApplication.lesgeverList(), "Selecteer een lesgever...")%>
<%= Html.ValidationMessageFor(model => model[i].Ses_LG_ID)%>
</div>
<div class="editor-label">
<%= Html.LabelFor(model => model[i].Ses_Lpl_ID)%>
</div>
<div class="editor-field">
<%= Html.DropDownListFor(model => model[i].Ses_Lpl_ID, (ViewData["lesplist"] as List<List<SelectListItem>>)[i], "Selecteer een lesplaats...")%>
<%= Html.ValidationMessageFor(model => model[i].Ses_Lpl_ID)%>
</div>
<% } %>
<p>
<input type="submit" value="Create" />
</p>
在我的aspx
我使用一個for循環,其越過列表(一FlatSessie是一個Sessie扁平弦)
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);
和lesgeverlist()方法
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();
}
現在問題:
這一切都很出色。列表進入ASPX,我得到表單的次數與列表中的項目一樣多,並且回發也可以工作,解析和一切。所以一切都很好,除了1分:下拉。
通常在MVC我不爲的SelectList或爲列表設置任何選定的價值,因爲他們不需要它,在編輯頁面,MVC設定有約束力的那些選定的項目本身。
然而,現在使用Foreach循環中的表格,除了下拉框外,所有字段都被填充爲,這些不會收到它們的「初始值」。
然而,當爲我選擇在設置列表中的項目,它得到的形式選擇。但是當我發送一個正常的列表沒有選擇的值,該模型粘合劑不會傳播它定值時,該字段的下拉的的SelectedValue(從計算機[「lesplist」]所示)。
然而,當我做一個表單提交,我返回視圖(因爲驗證失敗)的下拉菜單保留他們的價值。
這是可以解決的,或者這只是一個MVC2缺陷?
我也有節省很多數據庫的一個問題: http://stackoverflow.com/questions/2455619/using-linq-to-update -a-listt對象的,對DB – Stefanvds 2010-03-16 15:23:37