これは私にとってチェック&メイトの状況です...私はmvc 3を使用しています。単一のビューで投稿とコメントモジュールを作成しようとしています。以下は、ビューとコントローラーのコードです。ロード時に投稿とすべてのコメントを取得できますが、AJAX 呼び出しを介して新しいコメントを追加すると、DB の正しいテーブルに保存されますが、ページを更新せずにビューで更新する方法がわかりません.. .
//model
public class PostViewModel
{
public bool? IsActive
{ get; set; }
public string PostDescription
{ get; set; }
...
public List<PostCommentModel> objPostCommentInfo { get; set; }
}
//Post Controller
DBEntities1 db = new DBEntities1();
public ActionResult Index(int ID)
{
int id = Convert.ToInt32(ID);
PostViewModel objPostViewModel = new PostViewModel();
List<PostViewModel> lstobjPostViewModel = new List<PostViewModel>();
PostCommentModel objPostCommentModel;
List<PostCommentModel> lstobjPostCommentModel = new List<PostCommentModel>();
var objPost = (from x in db.PostInfoes
where x.PostId == id
select x).ToList();
var objPostComment = (from y in db.PostCommentInfoes
where y.PostId == id
orderby y.CommentId descending
select y).ToList();
foreach (var x in objPost)
{
objPostViewModel.PostID = x.PostId;
objPostViewModel.IsActive = x.IsActive;
objPostViewModel.PostTitle = x.PostTitle;
objPostViewModel.PostDescription = x.PostDescription;
lstobjPostViewModel.Add(objPostViewModel);
}
foreach (var y in objPostComment)
{
objPostCommentModel = new PostCommentModel();
objPostCommentModel.PostId = y.PostId;
objPostCommentModel.IsActive = y.IsActive;
objPostCommentModel.CommentBody = y.CommentBody;
lstobjPostCommentModel.Add(objPostCommentModel);
}
objPostViewModel.objPostCommentInfo = lstobjPostCommentModel;
return View(lstobjPostViewModel);
}
//view
@model IEnumerable<MVCProjectModels.PostViewModel>
<table border="1">
@foreach (var item in Model)
{
<tr>
<td>
<text>Created By:</text>
@Html.DisplayFor(modelItem => item.PostDescription)
</td>
<td rowspan="2">
@Html.DisplayFor(modelItem => item.PostDescription)
</td>
</tr>
.....
}
</table>
<table>
<tr>
<td>
<textarea cols="10" rows="5" id="txtComment"></textarea>
</td>
</tr>
<tr>
<td>
<input id="btnPostComment" type="button" value="Post Comment" />
</td>
</tr>
</table>
<table border="1">
@foreach (var item1 in Model)
{
foreach (var item2 in item1.objPostCommentInfo)
{
<tr>
<td colspan="2">
@Html.DisplayFor(modelItem => item2.CommentBody)
</td>
</tr>
}
}
</table>
//コメントを更新するためのAjax呼び出し(コメントはデータベースに保存されますが、UIまたはビューで更新する方法がわかりません)
<script type="text/javascript">
$("#btnPostComment").click(function () {
var commentBody = $("#txtComment").val();
postComment(commentBody);
});
function postComment(commentBody) {
$.ajax({
url: "/Post/postComment", // this controller method calls a store procedure to insert the new comment in the database.
type: 'POST',
data: {
Comment: commentBody,
ID: 6
},
success: function (result) {
},
error: function () {
alert("error");
}
});
}
</script>
上記のモジュールで大きな設計ミスをしている場合はお知らせください。私はmvcが初めてなので、いくつかの本や記事を読んでこれをやろうとしているだけなので、これがそのような結果を達成する正しい方法であるかどうかはわかりません. ありがとう