1

私のデータベースには、これら2つのテーブル(プロジェクトとテーマ)があります。

ProjectIDとThemeを含むProject_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; }
}

そして私の2番目のモデル:

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

私は口がきけなかったり役に立たなかったりしたくはありませんが、この質問はここで何度も回答されており (例 -複雑なビューモデルで CheckBox を使用する MVC3 )、Microsoft Gurus のブログにも取り上げられています。SOに関する完全な「例」の回答を保証するものではありません。私の出発点は、正直なところ、失礼ではありませんが、Googleの「mvc viewmodelチェックボックスリスト」です。

基本的に、ORM で生成されたリレーショナル データベース設計オブジェクトに適合するように ASP.NET MVC を曲げようとしています。逆にやってください。ビュー モデルを作成して、Web ページからフォーム データを取得するために必要なことを行います。データを取得したら何をするかが重要です。

したがって、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 に答える