2

まず、私は.NET MVCを初めて使用しますが、以前は一般的なMVCのアイデアを使用していました。EntityFrameworkを使用してCodeFirstで.NETMVC4を使用しています。

「作成」ビューに単純なドロップダウンを追加して、ユーザーが別のモデルに関連する外部キーを選択できるようにしようとしています。

関連するコードは次のとおりです。

ビュー(PropertyProgram / Create)から:

<div class="editor-field">
    @Html.DropDownListFor(model => model.Program.ID, new SelectList(ViewBag.Programs, "Id","Name"));
    @Html.ValidationMessageFor(model => model.Program.ID);
</div>

コントローラ(PropertyProgramController)から:

public ActionResult Create()
{
    ViewBag.Programs = db.Programs;
    return View();
}

モデル(PropertyProgram)から:

public class PropertyProgram
{
    public int Id { get; set; }
    public virtual Program Program { get; set; }
}

ビューは正しく機能し、正しいデータがドロップダウンに表示されますが、何らかの理由で、投稿後、IDを除くすべてのフィールドがnullの新しい行がデータベースのプログラムテーブルに作成されます。予想される動作は、作成されたPropertyProgram行で、ドロップダウンで選択されたプログラムIDがデータベースのProgram_ID列に配置されることです。これが期待どおりに動作しない理由はありますか?

4

1 に答える 1

3

もちろん、この質問を書いてから10分後に、答えがわかります。したがって、明らかにエンティティフレームワークでは、仮想リンクを持つだけでは不十分であり、テーブルを指すIDも必要です。このコード行をPropertyProgramモデルに追加しただけです。

public int ProgramId { get; set; }

これを追加した後、移行を作成し、ドロップダウンコードを次のように変更しました。

@Html.DropDownListFor(model => model.ProgramId, new SelectList(ViewBag.Programs, "Id", "Name"));

この後、すべてが正しく機能しています!なぜこれが正確に修正されたのかは100%わかりませんが、修正されました。誰かが理由を説明してくれるなら、私はそれを大いに感謝します。

于 2012-10-19T13:38:22.157 に答える