私は .NET は比較的新しく、MVC3、EF4、SQL 2008 R2 を使用して Web サイトを構築しています。また、親子テーブル関係の複雑さを伴う EF 生成の問題を含む、私の問題に直接対処しているように見えるスタックには何も見つかりませんでした。
私たちのサイトにはユーザー プロファイル (テーブル: プロファイル) があり、それぞれが Social テーブルに複数のレコードを持つことができます。つまり、Social テーブルには ProfileId の FK があります。
EF4 は、この Social テーブルの CRUD ビューとコントローラーを生成しました。Create 以外はすべて正常に機能します。Create ビューはドロップダウン ボックスを自動生成して、ユーザーが希望する ProfileId を選択できるようにしましたが、それは誤りです。(つまり、誰かが他のユーザーのためにソーシャル情報をセットアップすることを望まない.
そのビューで [作成] ボタンをクリックしても、何も起こりません。これは、ページにコンテキスト内のユーザーの ProfileId がないためである可能性が非常に高く、このハードルを克服するために何を変更すればよいか考えています。(ユーザーの ProfileId は、前のページ Index.cshtml のコンテキストにあります。これは、ソーシャル レコードのリストをユーザーの ID に一致するものに制限しているためです。)
モデルからのいくつかのコード:
using System;
using System.Collections.Generic;
public partial class Social
{
public int SocialId { get; set; }
public int ProfileId { get; set; }
public Nullable<int> ThemeId { get; set; }
public string Title { get; set; }
public Nullable<System.DateTime> CreateDate { get; set; }
public Nullable<System.DateTime> LastActivityDate { get; set; }
public Nullable<bool> Active { get; set; }
public Nullable<bool> Publish { get; set; }
public virtual Profile Profile { get; set; }
public virtual Theme Theme { get; set; }
}
コントローラーコード:
public ActionResult Create()
{
ViewBag.ProfileId = new SelectList(db.Profiles, "ProfileId", "Profile");
ViewBag.ThemeId = new SelectList(db.Themes, "ThemeId", "ThemeTitle");
return View();
}
[HttpPost]
public ActionResult Create(Social social)
{
if (ModelState.IsValid)
{
db.Socials.Add(social);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.ProfileId = new SelectList(db.Profiles, "ProfileId", "Profile", social.ProfileId);
ViewBag.ThemeId = new SelectList(db.Themes, "ThemeId", "ThemeTitle", social.ThemeId);
return View(social);
}
...そしてビューから:
<div class="editor-label">
@Html.LabelFor(model => model.ProfileId, "Profile")
</div>
<div class="editor-field">
@Html.DropDownList("ProfileId", String.Empty)
@Html.ValidationMessageFor(model => model.ProfileId)
</div>
どんな助けでも大歓迎です!