在同一页面上显示评论和发布表单以添加新评论
本文关键字:评论 表单 新评论 添加 一页 显示 布表单 | 更新日期: 2023-09-27 17:56:57
我正在用ASP.NET MVC
构建一个Web应用程序。我有一个评论页面,其中评论显示在最新到最旧的列表中,底部还有一个表单,用户可以在其中发布新评论。除了使页面显示最新注释外,还应突出显示表单条目。
显示的数据和帖子表单在同一页面上,最好的方法是什么?
没有 ajax 也可以做到这一点吗?
--代码提取--
class CommentsViewModel
{
public IList<Comment> comments { get; set; }
public Comment comment { get; set; }
public SelectList commentCategories { get; set; }
}
class Comment
{
[Required]
public string commentData { get; set; }
[Required]
public int? commentCategory { get; set; }
}
class Comments : Controller
{
public ActionResult Index()
{
Site db = new Site();
CommentsViewModel commenstVm = new
{
comments = db.GetComments(),
comment = new Comment(),
commentCategories = db.GetCommentCategories()
};
return View(commentsVm);
}
[HttpPost]
public ActionResult AddNewComment(CommentsViewModel commentVm)
{
Site db = new Site();
if (!ModelState.IsValid)
{
return View("Index", commentVm);
}
db.AddComment(commentVm.comment);
return RedirectToAction("Index");
}
}
这是一个基本View
和可以用作起点的Controller
。
和视图模型:
public class CommentsViewModel
{
public IList<Comment> comments { get; set; }
public CommentsViewModel()
{
comments = new List<Comment>();
}
}
public class Comment
{
[Required]
public string commentData { get; set; }
/** Omitted other properties for simplicity */
}
视图:
@using (@Html.BeginForm("Index", "Comments"))
{
@Html.TextBoxFor(t => t.comment.commentData)
@Html.ValidationMessageFor(t=> t.comment.commentData, "", new {@class = "red"})
<button name="button" value="addcomment">Add Comment</button>
}
@foreach (var t in Model.comments)
{
<div>@t.commentData</div>
}
控制器:
public class CommentsController : Controller
{
/** I'm using static to persist data for testing only. */
private static CommentsViewModel _viewModel;
public ActionResult Index()
{
_viewModel = new CommentsViewModel();
return View(_viewModel);
}
[HttpPost]
public ActionResult Index(Comment comment)
{
if (ModelState.IsValid)
{
_viewModel.comments.Add(
new Comment() {commentData = comment.commentData});
return View("Index", _viewModel);
}
return RedirectToAction("Index");
}
}