1

在我的數據庫中我有這兩個表(項目和主題)。如何將多個選定的複選框保存到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

回答

0

我不想被巧舌如簧或毫無幫助,但這個問題已經回答了在這裏的許多倍(例如 - 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(); 

希望有所幫助。

相關問題