Модель привязки формы к списку с помощью раскрывающегося списка. сбой привязки 1 способ для выпадающего - PullRequest
1 голос
/ 16 марта 2010

У меня есть действие под названием Sessies.В этом действии я создаю объекты 'Sessies' из формы.если они не существуют, я добавляю их в БД, если уже есть объекты Sessies, связанные с объектом 'Reeksen', я загружаю 'Sessies' в форму, чтобы их можно было редактировать.поэтому у меня есть создание и редактирование в 1 и той же форме.

Кроме того, у 'Reeksen' есть предопределенное количество '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, который проходит по списку (aFlatSessie - это сплющенные строки 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 или для List, потому что он им не нужен, на странице редактирования MVC устанавливает тесам выбирал элементы при связывании.

теперь, однако, с формой в цикле Foreach все поля заполняются , кроме выпадающих списков, они не получают своего «начального значения».

однако, когда я устанавливаю элемент в списке как выбранный, он выбирается в форме.(как видно из ViewData ["lesplist"]), но когда я отправляю обычный список без выбранного значения, связыватель модели не передает заданное значение для этого поля выбранному значению раскрывающегося списка.

однакоКогда я отправляю форму и возвращаю представление (из-за сбоя проверки), раскрывающиеся списки сохраняют свое значение.

Это поправимо, или это просто недостаток в MVC2?

1 Ответ

0 голосов
...