在我的数据库中,我有这两个表(项目和主题)。
我还有一个名为Project_Theme的中间表,其中包含ProjectID和Theme。
在主题中,预先设定了大约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 :(得分:0)
我不想愚蠢或无益,但这个问题已经在这里多次得到解答(例如 - MVC3 using CheckBox with a complex viewmodel),甚至还有微软Gurus的博客。它并不能保证在SO上有完整的“示例”答案。对于Google“mvc viewmodel checkbox list”,我的出发点是,老实说,我并不粗鲁。
基本上,您正在尝试弯曲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();
希望有所帮助。