私は徹底的に検索しましたが、実際に直面しているシナリオに対処するものは何も見つかりません(奇妙なことに、それは非常に一般的なことだと思っていたからです)。
バックグラウンド
ASP.NET MVC 4 と Entity Framework 5 Code First でアプリケーションを作成しています。この質問の目的のために、投稿とユーザーを含むブログ アプリケーションと考えてください。
計画
投稿モデルでは、すべての投稿に対応する UserId が必要です。
ASP.NET MVC 4 メンバーシップを使用すると、ログインしているユーザーのユーザー名を簡単に見つけることができます
User.Identity.Name
.
これは理想的ではありません。ID が必要ですが、このようなクエリを使用すると、データベースで名前を検索して ID を取得できます。
db.UserProfiles.Single(a => a.UserName == User.Identity.Name);
問題
投稿を作成しようとすると問題が発生します。Model.IsValid
ビューから UserId が渡されていないため、false です。明らかに、ユーザーは自分の ID を入力する必要がないためです。
ID 値をビューに入力ViewBag
してフィールドを使用しようとし@Html.Hidden()
ましたが、成功しませんでした。Model.IsValid
常に false を返します。
この情報は create ビューを介して入力する必要がありますか? または、コントローラーで直接行う必要がありますか?私は情報を持っていて、それをモデルに渡す方法を理解する必要があるだけなので、非常にイライラする問題です。
コントローラーコード
これは基本的に、デフォルトのスキャフォールディング コードです。コメントされたコードは、モデル値をコントローラーから直接設定しようとした方法ですが、それは試行錯誤に過ぎませんでした。
//
// POST: /Post/Create
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Post post)
{
if (ModelState.IsValid)
{
//var userId = db.UserProfiles.Single(a => a.UserName == User.Identity.Name);
//post.User.UserId = userId.UserId;
db.Posts.Add(post);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(post);
}