如何将多个选定的复选框保存到MVC4中的值

问题描述:

在我的数据库中我有这两个表(项目和主题)。如何将多个选定的复选框保存到MVC4中的值

我也有一个名为Project_Theme的中间表,其中包含ProjectID和主题。

在主题中有大约15个值预先设定。

我能够显示所有这些主题到复选框,但我不知道如何将它们保存在我的数据库中。

这里是我的控制器:

private ProjectContext db = new ProjectContext(); 

    // 
    // GET: /Project/ 

    public ActionResult Index() 
    { 
     return View(db.Project.OrderBy(i => i.Name).ToList()); 
    } 

    // 
    // GET: /Project/Create 

    public ActionResult Create() 
    { 

     var model = new Project(); 

     ViewBag.Theme = db.Theme.ToList(); 
     return View(model); 
    } 

这里是我的模型:

public class Project 
{ 
    [Key] 
    public int ID { get; set; } 

    public string Type { get; set; } 

    public string Name { get; set; } 

    public string Description { get; set; } 

    public string Date { get; set; } 
} 

我的第二个模型:

public class Theme 
{ 
    [Key] 
    public int ThemeID { get; set; } 

    public string Name { get; set; } 
} 

最后,这里是我创造的观点:

@using (Html.BeginForm()) { 
@Html.ValidationSummary(true) 
<fieldset> 
    <div style="text-align:center;padding:0 1px 0 1px" > 
     <table> 
      <tr align="left"> 
       <td> 
        <div class="editor-label" style="width:110px"> 
         <label for="theme">Theme(s)* : </label> 
        </div> 
       </td> 
       <td> 
        <div class="editor-field"> 
         @foreach (var t in theme) 
         { 
          <label class="checkbox"> 
           <input type="checkbox" name="theme" value="@t.ThemeID"> @c.Name 
          </label> 
         } 
        </div> 
       </td> 
      </tr> 

      <tr align="left"> 
       <td> 
        <div class="editor-label"> 
         @Html.LabelFor(model => model.Name) 
        </div> 
       </td> 
       <td> 
        <div class="editor-field focus"> 
         @Html.TextBoxFor(model => model.Name, new { style = "width:410px" }) 
         @Html.ValidationMessageFor(model => model.Name) 
        </div> 
       </td> 
      </tr> 

......... 

所以,请,如果有任何人可以帮助我,这将是真正伟大的:)

+0

你能提供更多关于你如何连接到数据库的信息吗?我假设实体框架? – LiverpoolsNumber9 2013-03-15 14:13:24

+0

Web.config =>连接字符串System.Data.SqlClient,我在DbContext中影响=> ProjectContext – 2013-03-15 14:16:11

+0

那么Entity框架呢? – LiverpoolsNumber9 2013-03-15 14:18:01

我不想被巧舌如簧或毫无帮助,但这个问题已经回答了在这里的许多倍(例如 - MVC3 using CheckBox with a complex viewmodel ),甚至还被微软大师的博客写道。它并不真正保证SO上有完整的“示例”答案。我的出发点是,诚实地说,我不会粗鲁,谷歌“mvc viewmodel复选框列表”。

本质上,您试图弯曲ASP.NET MVC以适合您的ORM生成的关系数据库设计对象。反过来这样做。创建一个视图模型来帮助你做你需要做什么这是从网页获取表格数据。一旦你获得了这些数据,你所做的是重要的一点。

所以,即使你最终整数您的POST操作阵列(例如主题的ID),你仍然可以在它的最简单的层面做到这一点:

var newProject = new Project(); 

// set other properties from posted model first then... 

newProject.Themes = model.ThemeIds.Select(x=> db.Themes.Find(x)); 
db.Projects.Add(newProject); 
db.SaveChanges(); 

希望有所帮助。