2010-03-16 84 views
1

我有一個名爲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缺陷?

+0

我也有節省很多數據庫的一個問題: http://stackoverflow.com/questions/2455619/using-linq-to-update -a-listt對象的,對DB – Stefanvds 2010-03-16 15:23:37

回答