それを処理する方法を検索しましたが、これまでのところ何も見つかりませんでした。私の問題があります。投稿モデルとコメントモデルがあります。私の CreateView には投稿を作成するための入力があり、この作成ビューにも表示されます。コードを見てみましょう:
EDIT2: CreateComment アクションの結果を PostController に追加します。& 私の部分的な ListPost ビューの ActionLink
これで、コメントを追加するためのリンクが表示され、CreateComment ビューで送信されますが、DB に保存しようとすると、次のエラーが発生します。
INSERT ステートメントが FOREIGN KEY 制約 \"FK_dbo.Comments_dbo.Posts_PostId\" と競合しました。データベース \Myproject"、テーブル \"dbo.Posts\"、列 'PostId' で競合が発生しました。\r\nステートメントは終了しました。"
ポストコントローラー
public ActionResult ListPost()
{
var post = db.Posts.ToList();
return PartialView("ListPost", post);
}
public ActionResult Create()
{
return View();
}
[HttpPost]
public ActionResult Create(FormCollection values)
{
var post = new Post();
TryUpdateModel(post);
if (ModelState.IsValid)
{
var context = new UsersContext();
var username = User.Identity.Name;
var user = context.UserProfiles.SingleOrDefault(u => u.UserName == username);
var userid = user.UserId;
post.UserId = userid;
post.Date = DateTime.Now;
db.Posts.Add(post);
db.SaveChanges();
return RedirectToAction("Create", "Post");
}
return View(post);
}
public ActionResult CreateComment()
{
ViewBag.PostId = new SelectList(db.Posts, "PostId", "Content");
return View("CreateComment");
}
[HttpPost]
public ActionResult CreateComment(FormCollection values)
{
var comment = new Comment();
TryUpdateModel(comment);
if (ModelState.IsValid)
{
var context = new UsersContext();
var username = User.Identity.Name;
var user = context.UserProfiles.SingleOrDefault(u => u.UserName == username);
var userid = user.UserId;
comment.UserId = userid;
comment.Date = DateTime.Now;
db.Comments.Add(comment);
db.SaveChanges();
return RedirectToAction("Create", "Post");
}
ViewBag.PostId = new SelectList(db.Posts, "PostId", "Content", comment.PostId);
return View(comment);
}
ビューを作成:
@model Myproject.Models.Post
@using (Html.BeginForm("Create", "Post", FormMethod.Post))
{
<legend>Add Post</legend>
<div class="editor-field">
@Html.EditorFor(model => model.Content)
@Html.ValidationMessageFor(model => model.Content)
<input type="file" name="Photo" id="Photo"/>
</div>
<p>
<input type="submit" value="Post" />
</p>
}
@{Html.RenderAction("ListPost", "Post");}
リスト投稿ビュー
@model IEnumerable<MyProject.Models.Post>
@foreach (var item in Model.OrderByDescending(x => x.Date))
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Content)
</td>
</tr>
<tr>
<td>
@Html.DisplayFor(modelItem => item.Date)
<span>@Html.DisplayFor(modelItem => item.Users.UserName)</span>
</td>
</tr>
<tr>
<td> @Html.ActionLink("Add Comment", "CreateComment", new {id=item.PostId})</td>
</tr>
}
ここで、投稿にコメントを追加したいと思います。私のコメント モデル (およびテーブル) には、postId プロパティがあります。createCommentView を ListPost ビューに含めるにはどうすればよいですか。 CreatePostView ではなく、このビューに含める必要があると思いますが、どちらもわかりません。どちらの場合も、同じビューでコメントモデルと投稿モデルを使用しているため、方法がわかりません...
何かアイデア、私に送ってくれるリンクなどはありますか? ありがとう、下手な英語でごめんなさい