您正在寻找的页面使用了您输入的信息。返回该页面可能会导致您重复执行任何操作。你想继续吗?
但是,如果我们只是再次输入URL并单击ENTER,一切都很好:作者显示,评论只出现一次。因此,我们唯一的解决方案是重定向到同一页面。这是表格:
<div style="text-align: left">
<div><i>Leave your comment</i>
</div>
<form method="post">
<fieldset>
<p>
<textarea rows="10" class="form-control" type="text" id="1" name="commentText" style="height: 100px"></textarea>
</p>
<p>
<input type="submit" name="buttonSubmit" onclick="redirect" value="Add comment" class="btn btn-default" style="" />
</p>
</fieldset>
</form>
</div>
&#13;
这是评论在页面上的打印方式:
<h3>Comments</h3>
<br>
<div>
@foreach (var comment in ViewBag.Comments) {
<section class="row">
<article class="post col-md-12">
<div class="about">
Posted on <i>@comment.Date</i>
@if (comment.AuthorId != null) { @: by <i>@comment.Author.FullName</i>
}else { @: by <i>anonymous</i>
}
</div>
<div class="body">@comment.Text</div>
</article>
</section>
}
</div>
&#13;
提前致谢!
答案 0 :(得分:0)
使用@Ajax.BeginForm()
帮助程序。
在AjaxOptions()
中,您希望将Httpmethod设置为&#34; Post&#34;,InsertionMode.InsertBefore(或者After取决于您想要新评论的位置),以及UpdateTargetId =& #34;您的注释-DIV&#34 ;.
您需要包含jquery.unobtrusive-ajax.js,以便Ajax帮助程序正常工作。您可以使用nuget包管理器将其拉入。确保将其添加到您的jquery包中。
然后,您需要在控制器中创建post动作以接受注释参数并返回部分视图。
这样做可以将Ajax限制在剃刀助手和控制器方法中。
查看:
@using (Ajax.BeginForm("AjaxAddComment",
"MyController",
/* route params */,
new AjaxOptions()
{
InsertionMode = InsertionMode.InsertBefore,
UpdateTargetId = "commentsDiv",
HttpMethod = "Post"
}, htmlAttributes: new { /* ... */ }))
{
<div class="form-horizontal">
@* comment form... *@
</div>
}
...
<div id="commentsDiv">
<div class="comment">...</div>
<div class="comment">...</div>
</div>
控制器:
[HttpPost]
//[ValidateAntiForgeryToken]
public async Task<PartialView> AjaxAddComment(string comment, /*...other params*/)
{
var newComment = ... // comment viewModel
// add comment to db
await db.SaveChangesAsync();
return PartialView("_CommentPartial", newComment);
}
_CommentPartial:
<div class="comment">
...
</div>