1

在我的数据库中,我有这两个表(项目和主题)。

我还有一个名为 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>

.........

所以,如果有人可以帮助我,那就太好了:)

4

1 回答 1

0

我不想油嘴滑舌或没有帮助,但这个问题已经在这里回答了很多次(例如 - MVC3 using CheckBox with a complex viewmodel),甚至微软大师也发表了博客。它并不真正保证关于 SO 的完整“示例”答案。我的出发点是,老实说,我对谷歌“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();

希望有帮助。

于 2013-03-15T14:39:13.190 回答