ここで少し奇妙です。新しいイントラネットの利点を強調する別の「MVC に足を踏み入れる」プロジェクトであるブログがあります。記事、コメント、および特定の記事に対するコメントを送信するためのフォームを含む典型的なブログ投稿ページがあります。
記事のコンテンツを含む文字列型のメイン ビュー ("Post") と、2 つの Html.RenderAction メソッドがあります。1 つはコメントを取得するためのもので、もう 1 つはフォームを介してコメントを追加するためのものです。
私の問題は、コメントが投稿されると、GetComments メソッドが AddComment の前に呼び出されるため、ページが更新されると、新しいコメントがデータベースに追加されても表示されないことです。F5 をすばやく押すと、これが確認されます。ビューで最初に宣言されているため、GetComments が最初に呼び出されていることは理解していますが、取得の前に追加を行うようにビューに指示する方法がわかりません。
これが私のコードです:
コントローラ:
public ActionResult AddComment()
{
return PartialView("AddComment");
}
[HttpPost]
public ActionResult AddComment(Comment comment)
{
comment.DateSubmitted = DateTime.Now;
db.Comments.Add(comment);
db.SaveChanges();
return PartialView(comment);
}
public ActionResult GetComments(int articleid)
{
var comments = db.Comments.Where(c => c.ArticleID == articleid).ToList();
return PartialView(comments);
}
投稿ビュー
@model IntranetBlog.Models.Article
@{
ViewBag.Title = "Post";
}
<div class="row">
<div class="span12">
<h3>@Html.DisplayFor(modelItem => Model.Title)</h3>
<small>by Ruth Barlow on @Html.DisplayFor(modelItem => Model.DateCreated)</small>
@if (Model.Image != null)
{
<p>
<img src="@Url.Action("GetImage", "Home", new { articleID = Model.ArticleID })" alt="" width="150" height="150" />
</p>
}
<div>
@Html.DisplayFor(modelItem => Model.Body)
</div>
<small>Posted under @Html.DisplayFor(modelItem => Model.Category.Name)</small>
</div>
<div class="span12">
@{
Html.RenderAction("GetComments", "Home", new { articleID = Model.ArticleID });
}
</div>
<div class="span12">
@{
Html.RenderAction("AddComment", "Home", new { articleID = Model.ArticleID });
}
</div>
</div>
GetComments パーシャル:
@model IEnumerable<IntranetBlog.Models.Comment>
@if (Model.Any())
{
<h3>What you're saying</h3>
foreach (var item in Model)
{
<div>
Comment: @Html.DisplayFor(modelItem => item.Body)
</div>
<div>
Submitted by: @Html.DisplayFor(modelItem => item.SubmittedBy)
on @Html.DisplayFor(modelItem => item.DateSubmitted)
</div>
<hr />
}
}
else
{
<p>There are no comments for this post. Why not add one?</p>
}
AddComment パーシャル
@model IntranetBlog.Models.Comment
@using (Html.BeginForm())
{
<h3>Why not leave us a comment?</h3>
@Html.ValidationSummary()
<fieldset>
<div class="editor-label">
@Html.LabelFor(model => model.Body)
</div>
<div class="editor-field">
@Html.TextAreaFor(model => model.Body, 20, 20, null)
@Html.ValidationMessageFor(model => model.Body)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.SubmittedBy)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.SubmittedBy)
@Html.ValidationMessageFor(model => model.SubmittedBy)
</div>
<p>
<input type="submit" value="Add comment" id="AddComment" class="btn btn- primary" />
</p>
</fieldset>
}
これが理にかなっていることを願っています。前もって感謝します。