2011-08-19 65 views
2

我真的坚持在这:我有两个从数据库中填充的列表框。我想将项目从一个列表复制到另一个列表。然后,这些更改必须保存在数据库中。ASP.NET MVC:HOWTO:编辑multiselectlist(列表框)后更新数据库

这是我的本钱:

自定义视图模型:

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()... Students表中有一个名为“ClassID”的字段,并且在将行从1列表复制到另一个时,ID必须从当前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> 
+0

您目前没有任何关于如何访问数据库的信息。你是否使用实体框架,NHibernate,直接ADO.Net,别的?当这种东西被排除在外时,很难帮助将信息保存到数据库中。 –

回答

2

你的问题是有关从视图返回一个列表...看看这个帖子由菲尔哈克:

Model Binding To A List

在这里你可以看到我遇到了类似的问题。在我的情况下,使用复选框来选择列表中的项目。提出的解决方案引导我朝着正确的方向发展,但这不是我使用的解决方案,我使用了菲尔的帖子。

My Post

希望这会有所帮助。

+0

好的,但是,我该如何更新数据库呢? – Lorenzo

+1

@laurent jejeje ...我错误地认为你使用的是EF ... Chris是对的,你没有提供关于你用于数据访问的技术的任何信息。请提供这样的信息,以便我们推荐一个行动方案。 – AJC

0

我们也可以实现使用编辑器的辅助,但使所有之前选择将提交工作multiselectlist元素:

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

这将通过multiselectlist项目控制器。