在同一页面上显示评论和发布表单以添加新评论

本文关键字:评论 表单 新评论 添加 一页 显示 布表单 | 更新日期: 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");
    }
}