سلام من از پست =>>>> ارسال نظر به صورت Ajax در Asp.Net MVC
استفاده کردم برای صفحاتم کامنت بزارم همه چی اوکیه اما موقعی ک نظری ثبت میشه پارشیال نظرات جداگانه تو صفحه نمایش داده میشه و url به آدرس پارشیال تغییر میکنه.برای کامنت یک کنترل جداگانه در نظر گرفتم
_addnewcomment
@model Models.Comment @using (Ajax.BeginForm("_AddNewComment", "Comments", new AjaxOptions() { UpdateTargetId = "comment-box", OnSuccess = "Success", //HttpMethod = "POST", //InsertionMode = InsertionMode.InsertAfter })) { @Html.AntiForgeryToken() @Html.HiddenFor(m => m.ObjectID) @Html.HiddenFor(m => m.ObjectName) @Html.HiddenFor(m => m.ParentID) <div class="form-horizontal"> @Html.ValidationSummary(true, "", new { @class = "text-danger" }) <div class="form-group"> <label class="control-label col-md-1 col-md-push-11">متن </label> <div class="col-md-5 col-md-push-5"> @Html.TextAreaFor(model => model.Text, new { @class = "form-control" }) @Html.ValidationMessageFor(model => model.Text, "", new { @class = "text-danger" }) </div> </div> <div class="form-group"> <div class="col-md-1 col-md-push-10"> <input type="submit" value="ثبت " class="btn btn-default" /> </div> </div> </div> }
_Comment
<div id="comment-box"> <h2 class="page-header">نظرات - @Model.Where(c => c.IsAccept == true).Count()</h2> @if (Model != null && Model.Count() > 0) { <ul class="media-list"> @Comments() </ul> } @if (User.Identity.IsAuthenticated) { <h4 class="page-header">ثبت نظر</h4> @Html.Partial(MVC.Comments.Views._AddNewComment, new Comment() { ObjectID = ViewBag.objid, ObjectName = ViewBag.objname }) } </div>
js
<script> //function Success() { // alert("aaaaaaaaaaa"); //} function AddComment(ParentID) { jQuery.ajax({ url: "/Comments/_AddNewComment", data: { pid: ParentID,objid:@objid,objname:"@objname" }, type:"Get" }).done(function(result) { $('#Cm_' + ParentID).append(result); }); } </script> <style>
controller
[HttpPost] public virtual ActionResult _AddNewComment(Comment c) { //save comment //q list commentha return PartialView(MVC.Comments.Views._Comment, q); }
دوست عزیز:
کدتونو بذارین دوستان برنامه نویس بهتر میتونن کمکتون کنن!!!
به احتمال زیاد مشکلوت رو Ajax هست
ایا کتابخانه زیر را رفرنس دادید ، بدون ان ممکن نیست
jquery.unobtrusive-ajax.min.js
jquery.unobtrusive-ajax.min.js
کد را قرار دهید
شما در UpdatetargetID یک ID دادید
اون رو بررسی کنید که وجود داشته
قسمتی که بروز میشه اون آی دی هست
قرار دادم تو پست اول...
من المانی با ID comment-box ندیدم
توی ویوی _Comment هست
<div id="comment-box"> <h2 class="page-header">نظرات - @Model.Where(c => c.IsAccept == true).Count()</h2> @if (Model != null && Model.Count() > 0) { <ul class="media-list"> @Comments() </ul> } @if (User.Identity.IsAuthenticated) { <h4 class="page-header">ثبت نظر</h4> @Html.Partial(MVC.Comments.Views._AddNewComment, new Comment() { ObjectID = ViewBag.objid, ObjectName = ViewBag.objname }) } </div>
کد ها به نظر درست میام
متاسفانه هرچی به ذهنم میرسید را بررسی کردیم
باید دیگه کد را Trace کنید تا مطمئن بشید همه موارد به درستی کار میکنند
خیلی ممنون
سلام مجدد
اون مشکل آپدیت تا حدودی حل شد و نمیدونم هم دلیلش چی بود فقط برای بار اول یعنی وقتی اولین کامنت ثبت میشه div آپدیت نمیشه :|
- الان وقتی برا کامنتی ک والد هست پاسخ بزارم و دنبالش بخوام یه کامنت با والد 0 ثبت کنم value ، ورودیhidden input کامنت والد 0 با کامنت والد قبلی یکی میشه
<input data-val="true" data-val-number="The field ParentID must be a number." id="ParentID" name="ParentID" type="hidden" value="197">
- ی سوال دیگه اگ بخوام موقع پاسخ به کامنت یک عدد از ویو addcomment باز بشه چکار باید کرد؟الان هرچی دکمه پاسخ رو بزنم اون ویو تکثیر میشه.(غیر از راه غیر فعال کردن دکمه پاسخ)
ممنون
متوجه سوال اول نشدم
مشکل حل شد یکی از فیلدها داخل ویو null میشد برای همین خطا میداد
خیلی خیلی ممنون
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)