ASP.NET mvc: HOWTO: обновить базу данных после редактирования списка выбора (список)

Я действительно застрял в этом: у меня есть два списка, заполненные из базы данных. Я хочу скопировать элементы из одного списка в другой. Затем изменения необходимо сохранить в базе данных.

Вот что у меня есть:

Пользовательская модель просмотра:

public class StudentModel
    {
        public IEnumerable<SelectListItem> NormalStudentsList { get; set; }
        public IEnumerable<SelectListItem> StudentsNoClassList { get; set; }
        public string[] NormalSelected { get; set; }
        public string[] NoClassSelected { get; set; }
        public string Save { get; set; }
    }

Контроллер:

public ActionResult IndexStudents(Docent docent, int id, int klasgroepid)
        {
            var studentModel = new StudentModel
            {
               NormalStudentsList = docent.GeefStudentenNormaalList(id, klasgroepid),
               StudentsNoClassList = docent.GeefStudentenNoClassList(id, klasgroepid)
            };

            return View(studentModel);
        }

        [HttpPost, Authorize]
        public ActionResult IndexStudentsResult(StudentModel model, string add, string remove)
        {
            ModelState.Clear();
           (if! string.IsNullOrEmpty(add))
               //update database
            SaveState(model);
            return View(model);
        }

Но как я могу обновить базу данных?? Использование UpdateModel()? или я должен работать с FormCollection? Но мне нужна formCollection для работы с UpdateModel()... В таблице «Студенты» есть поле с именем «ClassID», и при копировании строк из 1 списка в другой идентификатор должен измениться с текущего ClassID на «0». .

Как я могу это сделать? Я действительно застрял в этом ... надеюсь, вы можете помочь.

Это мой взгляд

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"  Inherits="System.Web.Mvc.ViewPage<ProjectenII.Models.Domain.StudentModel>"%>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    IndexStudents
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <h2>IndexStudents</h2>

  <%using (Html.BeginForm()) { %>
    <%=Html.ListBoxFor(model => model.NormalSelected, new MultiSelectList(Model.NormalStudentsList, "StudentNummer", "Naam", Model.NormalSelected), new { size = "6" }); %>

    <input type="submit" name="add" 
                          id="add" value=">>" /><br />
    <%=Html.ListBoxFor(model => model.NoClassSelected, new MultiSelectList(Model.StudentsNoClassList, "StudentNummer", "Naam", Model.NoClassSelected)); %>
  <% } %>

  <%=Html.HiddenFor(model => model.Save) %>
  <input type="submit" name="apply" id="apply" value="Save!" />
</asp:Content>

person Lorenzo    schedule 19.08.2011    source источник
comment
У вас нет никакой информации о том, как вы сейчас получаете доступ к базе данных. Используете ли вы Entity Framework, NHibernate, прямо ADO.Net или что-то еще? Трудно помочь сохранить информацию в базе данных, когда о таких вещах не может быть и речи.   -  person Chris Conway    schedule 19.08.2011


Ответы (2)


Ваша проблема связана с возвратом списка из представления... проверьте этот пост Фила Хаака:

Привязка модели к списку

Здесь вы можете видеть, что я столкнулся с похожей проблемой. В моем случае использовались флажки для выбора элементов в списке. Предложенное решение направило меня в правильном направлении, но это было не то, что я использовал, я использовал пост Фила.

Моя запись

Надеюсь это поможет.

person AJC    schedule 19.08.2011
comment
@laurent jejeje ... Я ошибочно предположил, что вы используете EF ... Крис прав, вы не предоставляете никакой информации о том, какую технологию вы используете для доступа к данным. Пожалуйста, предоставьте их, чтобы мы могли порекомендовать курс действий. - person AJC; 19.08.2011

Мы также можем добиться этого с помощью помощника редактора, но создание всех элементов списка множественного выбора, выбранных перед отправкой, будет работать:

$("#NormalSelected option").prop("selected", true);

Это передаст элементы списка выбора в контроллер.

person Ahmetcan Ozturk    schedule 16.03.2017