したがって、2つのコントローラクラスがあります。ASP.NET Core MVC異なるコントローラメソッドにViewModelを送信する方法
AnnouncementsController、これは、ユーザーの投稿を含むソートのホームページを生成するだけです。その後
// GET: Announcements
public async Task<IActionResult> Index()
{
var announcements = await _context.Announcement.ToListAsync();
announcements = announcements.OrderByDescending(x => x.CreatedOn).ToList();
foreach (var ann in announcements)
{
ann.TimeAgo = ann.CreatedOn.TimeAgo();
}
var users = await _context.Users.ToListAsync();
var comments = await _context.Comment.ToListAsync();
AnnouncementAndCommentsViewModel aacVM = new AnnouncementAndCommentsViewModel();
AnnouncemenstViewModel announcemenstViewModel = new AnnouncemenstViewModel();
announcemenstViewModel.Announcement = announcements;
announcemenstViewModel.User = users;
announcemenstViewModel.Comment = comments;
CommentViewModel commentViewModel = new CommentViewModel();
aacVM.announcemenstViewModel = announcemenstViewModel;
aacVM.commentViewModel = commentViewModel;
ViewData.Add("currentUserID",GetCurrentUser().Id);
return View(aacVM);
}
私はAnnouncementController IndexビューからCommentsController
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(CommentViewModel commentViewModel)
{
if (ModelState.IsValid)
{
var comment = new Comment();
comment.CreatedOn = DateTime.Now;
comment.Body = commentViewModel.Comment.Body;
Announcement announcement = GetAnnouncement(commentViewModel.Announcement.AnnouncementID);
comment.Announcement = announcement;
ApplicationUser user = GetCurrentUser();
comment.User = user;
_context.Add(comment);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(commentViewModel);
}
を持って、私は記事のリストを持っているし、私は行くとは対照的に、書き込み、そのビューに直接コメントを追加できるようにしたいです別のビューに
私は2つのViewModelsを持っています.1つはアナウンスを格納し、もう1つはコメント用です。
コメントコントローラーでCreate Postメソッドを呼び出そうとしていますが、CommentViewModelを受け入れる引数はありません。 私はに送信され得続けるここに私のindexビューです。で満たされたボディと
をする方法を取得し、どのように私は、@ShyjuがコメントしたようCommentsController
@model Treharris.Models.AnnouncementAndCommentsViewModel;
.
.
.
@foreach (var item in Model.announcemenstViewModel.Announcement)
{
.
.
.
<div class="announcement-body">
<p>@Html.DisplayFor(modelItem => item.Body)</p>
</div>
<div class="comments">
<p id="comment">Comments</p>
@using(Html.BeginForm("Create","Comments", FormMethod.Post,
new { cvm = Model.commentViewModel }))
{
@@Model.commentViewModel.Announcement = item;
@Html.HiddenFor(m => m.commentViewModel.Announcement)
@Html.TextBoxFor(m => m.commentViewModel.Comment.Body,
new { placeholder = "Comment body" })
<input type="submit" value="Create" />
}
動作するように結合モデルの場合は、フォームの要素名は、アクションメソッドのパラメータのプロパティ名/階層と一致する必要があります。できるだけ単純なフラットビューモデルを作成します。 – Shyju