我有一个观点,我想接受一个帖子和一个评论,这样当我做帖子时,它将同时具有两者并且能够更新两者。
以下是观点:
@model GameDiscussionBazzar.Data.Comment
@{
ViewBag.Title = "EditComment";
Layout = "~/Views/Shared/_EditCommentLayout.cshtml";
}
<div class="EditComment">
<h1>
Edit Comment
</h1>
@using (Html.BeginForm("EditThreadComment", "Comment"))
{
<div class="EditingComment">
@Html.EditorForModel()
@Html.Hidden("comment", Model)
@Html.HiddenFor(i => i.ParentThread)
<input type="submit" value="Save"/>
@Html.ActionLink("Return without saving", "Index")
</div>
}
</div>
我有2个方法,一个只是一个动作结果并返回视图,而另一个是返回主页的帖子,如果它成功了。 这是方法:
public ActionResult EditThreadComment(int commentId)
{
Comment comment = _repository.Comments.FirstOrDefault(c => c.Id == commentId);
return View(comment);
}
[HttpPost]
public ActionResult EditThreadComment(Comment comment, Thread thread)
{
var c = thread.ChildComments.FirstOrDefault(x => x.Id == comment.Id);
thread.ChildComments.Remove(c);
if (ModelState.IsValid)
{
_repository.SaveComment(comment);
thread.ChildComments.Add(comment);
_tRepo.SaveThread(thread);
TempData["Message"] = "Your comment has been saved";
return RedirectToAction("Index", "Thread");
}
else
{
TempData["Message"] = "Your comment has not been saved";
return RedirectToAction("Index", "Thread");
}
}
所以我的问题又是如何将2个参数传递到视图中?或者我如何传递我的线程的值?
答案 0 :(得分:4)
为了传回多个值,您应该创建一个ViewModel,它可以保存您希望更改的任何对象和值,并(最终)将其传递回视图。
所以,创建一个这样的新模型......(我现在不在编译器中,所以如果这些代码没有构建,我会道歉。)
public class PostViewModel
{
public Comment Comment { get; set; }
public Thread Thread { get; set; }
}
在你的控制器中,你需要基本上在PostViewModel之间来回转换。
public ActionResult EditThreadComment(int commentId)
{
PostViewModel post = new PostViewModel();
Comment comment = _repository.Comments.FirstOrDefault(c => c.Id == commentId);
post.Comment = comment;
post.Thread = new Thread();
return View(post);
}
public ActionResult EditThreadComment(PostViewModel post)
{
Comment comment = post.Comment;
Thread thread = post.Thread;
// Now you can do what you need to do as normal with comments and threads
// per the code in your original post.
}
而且,在您看来,您现在可以将其强烈输入到PostViewModel。所以,在顶部......
@model GameDiscussionBazzar.Data.PostViewModel
你必须更深入一级才能找到单独的Comment和Thread对象。
答案 1 :(得分:1)
您可以创建一个ViewModel类来保存Comment和Thread,然后将该单个视图模型传递给视图,然后该视图可以访问其中的Comment和Thread。
答案 2 :(得分:0)
您可以使用ViewBag.Thread = myThread