PDA

View Full Version : چرا مقدار لایک دیدگاه بصورت آنی و ایجکسی بروز نمیشه؟



پروگرامنویس
دوشنبه 21 خرداد 1397, 10:51 صبح
درود
من برای هم پست و هم دیدگاه های پست سیستم لایک بصورت رو ایجکسی پیاده کردم،نکته اینجاست که برای خود پست بدرستی کار میکنه اما برای دیدگاه ها وقتی بعنوان کاربر لایک یا دیسلایک رو میزنم تو دیتابیس تغییر انجام میشه اما برای کاربر بصورت آنی نشون داده نمیشه و باید یکبار صفحه رو رفرش کنم تا تغییر نشون داده بشه!
اینم کدهای اکشن،ویو اصلی و پارشال ویو نمایش لایک
اکشن:


[Route("likecmnt")]
public ActionResult _LikeComment(int id, int i = 0)
{
if (i == 1)
{


SiteContext db = new SiteContext();
Comment cmnt = db.Comments.Find(id);
if (!User_Validate_cmnt(id))
{
ViewBag.lk = cmnt.LikeCmnt;
return MessageBox.Show("شما قبلا رای دادید", MessageType.Alert, true);
}
else
{
cmnt.LikeCmnt++;
TempData["addlk"] = cmnt.LikeCmnt;
db.SaveChanges();
return PartialView(TempData["addlk"]);
}
}
else
{
return PartialView();
}
}

پارشال ویو لایک






@if (TempData["addlk"]!=null)
{
@TempData["addlk"]
}
else
{
@TempData["lk"]
}




ویو لایک


foreach (var item in Model.comments)
{
<div class="box-cmnts">
<div class="row">
<div class="col col-md-6">
<div class="like-cmnt">
<a href="@Url.Action("_LikeComment", new { @id=item.ID,i=1})" data-ajax="true" data-ajax-method="GET" data-ajax-mode="replace" data-ajax-update="#dv-likecmnt(@item.ID)"><i class="fa fa-thumbs-o-up"></i></a>
<div style="display:inline-block" id="dv-likecmnt(@item.ID)">
@Html.Partial("_LikeComment",TempData["lk"]=item.LikeCmnt)
</div>


اینو بگم اول خیلی ساده پیاده سازی کرده بودم،یعنی وقتی برای بار نخست صفحه لود میشه مقدار لایک توسط خود مدل صفحه از دیتابیس بارگزاری میشد و هربار که اکشن لایک فراخونی میشه این مقدار جایگزین میشد با مقدار ویوبک پارشال ویو! ولی اونم همین ایراد رو داشت .گمون کردم مشکل از ویوبک هستش که از تمپ دیتا استفاده کردم اما مشکل رفرش نشدن آنی برطرف نشده هنوز

hakim22
دوشنبه 21 خرداد 1397, 12:41 عصر
شما باید با جاوا اسکریپت تعداد لایک و دیسلایک رو کم و زیاد کنید.

پروگرامنویس
سه شنبه 22 خرداد 1397, 14:48 عصر
شما باید با جاوا اسکریپت تعداد لایک و دیسلایک رو کم و زیاد کنید.
آخه من از همین روش واسه لایک خود پست استفاده کردم و داره کار میکنه و فقط مشکلم فقط تو همین آنی رفرش نشدنه مربوط به دیدگاه هاست.هرکاری کردم نفهمیدم مشکلش چیه؟
من تو این روش تعیین کردم کاربری با یک آی.پی مشخص فقط یکبار بتونه یک پست یا دیدگاه پست رو لایک-دیسلایک کنه.
با جاوا اسکریپت میشه چنین چیزی رو پیاده سازی کرد؟
میبشه یه مثال عملی برام اینجا نشون بدید؟

پروگرامنویس
سه شنبه 22 خرداد 1397, 19:02 عصر
من این تغییرات رو ایجاد کردم و خواستم به گفته شما با جاوااسکریپپ انجام بدم
کنترلر


[Route("_LikeComment")]
public ActionResult _LikeComment(int id)
{
SiteContext db = new SiteContext();
Comment cmnt = db.Comments.Find(id);
if (!User_Validate_cmnt(id))
{
return MessageBox.Show("شما قبلا رای دادید", MessageType.Alert, true);
}
else
{
cmnt.LikeCmnt++;
int lk = cmnt.LikeCmnt;
db.SaveChanges();
return Json(lk);
}
}




<button style="background-color:transparent;border:none;display:inline-block" name="@item.ID" class="lk-cmnt"><i class="fa fa-thumbs-o-up"></i></button>
<div style="display:inline-block" id="dv-likecmnt(@item.ID)">
@item.LikeCmnt
</div>




$('.lk-cmnt').on({
'click': function () {
var id = $(this).attr('name');
jQuery.ajax({
url: "/_LikeComment",
type: "GET",
data: id,
success: function (result) {
var div = '#dv-likecmnt(' + id + ')';
$(div).empty();
$(div).append(msg);
}
});
}
});

اما هیچ اتفاقی نمی افته و تو قسمت کنسول مروگر خطای
jquery-3.3.1.min.js:2 GET http://localhost:51868/_LikeComment?2 500 (Internal Server Error)
رو میده!یکی کمک کنه لطفا

Anoosh100
چهارشنبه 23 خرداد 1397, 12:02 عصر
سلام یه سوال دارم Json شما تو کنترلر نباید JsonRequestBehavior داشته باشه؟ (پارامتر دوم return)


من این تغییرات رو ایجاد کردم و خواستم به گفته شما با جاوااسکریپپ انجام بدم
کنترلر


[Route("_LikeComment")]
public ActionResult _LikeComment(int id)
{
SiteContext db = new SiteContext();
Comment cmnt = db.Comments.Find(id);
if (!User_Validate_cmnt(id))
{
return MessageBox.Show("شما قبلا رای دادید", MessageType.Alert, true);
}
else
{
cmnt.LikeCmnt++;
int lk = cmnt.LikeCmnt;
db.SaveChanges();
return Json(lk);
}
}




<button style="background-color:transparent;border:none;display:inline-block" name="@item.ID" class="lk-cmnt"><i class="fa fa-thumbs-o-up"></i></button>
<div style="display:inline-block" id="dv-likecmnt(@item.ID)">
@item.LikeCmnt
</div>




$('.lk-cmnt').on({
'click': function () {
var id = $(this).attr('name');
jQuery.ajax({
url: "/_LikeComment",
type: "GET",
data: id,
success: function (result) {
var div = '#dv-likecmnt(' + id + ')';
$(div).empty();
$(div).append(msg);
}
});
}
});

اما هیچ اتفاقی نمی افته و تو قسمت کنسول مروگر خطای
jquery-3.3.1.min.js:2 GET http://localhost:51868/_LikeComment?2 500 (Internal Server Error)
رو میده!یکی کمک کنه لطفا

پروگرامنویس
چهارشنبه 23 خرداد 1397, 12:32 عصر
سلام یه سوال دارم Json شما تو کنترلر نباید JsonRequestBehavior داشته باشه؟ (پارامتر دوم return)
سلام، آره باید باشه حواسم نبود جا انداخته بودم! ولی با گذاشتن پارامتر دوم هم مشکل برطرف نشد

پروگرامنویس
چهارشنبه 23 خرداد 1397, 17:47 عصر
بلاخره بعد از کلی کلنجار رفتن و بدبختی ایراد کار رو فهمیدم و درستش کردم!:لبخندساده:
ایراد از آی.دی دیوهایی بود که قرار بود بعد از تغییر مقدار بروز بشن !:متفکر: چون شمار دیوها زیاد بود من از یک پسوند با مقدار آی.دی دیدگاه ها برای اینکار استفاده کرده بودم ولی انگار مقدار data-ajax-update تگ a با آی.دی ویو مورد نظر بدلایلی یکی نمیشد و... خلاصه کد رو ببشکل زیر تغییر دادم و مشکلم حل شد.خدایی کلافه شده بودم ولی الان حالم جا اومد!:لبخندساده:



// لایک دیدگاه
[Route("_LikeComment")]
public ActionResult _LikeComment(int id)
{
SiteContext db = new SiteContext();
Comment cmnt = db.Comments.Find(id);
if (!User_Validate_cmnt(id))
{
return MessageBox.Show("شما قبلا رای دادید", MessageType.Alert, true);
}
else
{
cmnt.LikeCmnt++;
ViewBag.lk = cmnt.LikeCmnt;
db.SaveChanges();
return PartialView();
}
}


[Route("dislikecmnt")]
public ActionResult _DisLikeComment(int id)
{
SiteContext db = new SiteContext();
Comment cmnt = db.Comments.Find(id);
if (!User_Validate_cmnt(id))
{
ViewBag.dslikecmnt = cmnt.DisLikeCmnt;
return MessageBox.Show("شما قبلا رای داده اید!", MessageType.Alert, true);
}
else
{
cmnt.DisLikeCmnt++;
ViewBag.dslikecmnt = cmnt.DisLikeCmnt;
db.SaveChanges();
return PartialView();
}
}




<div class="like-cmnt">
@{string lk = "lk"+item.ID.ToString();
}
<a href="@Url.Action("_LikeComment", new { @id = item.ID })" data-ajax="true" data-ajax-method="GET" data-ajax-mode="replace" data-ajax-update="#@lk"><i class="fa fa-thumbs-o-up"></i></a>
<div style="display:inline-block" id="@lk">
@item.LikeCmnt
</div>
@{string dk = "dk" + item.ID.ToString();
}
<a href="@Url.Action("_DisLikeComment", new { @id = item.ID })" data-ajax="true" data-ajax-method="GET" data-ajax-mode="replace" data-ajax-update="#@dk"><i class="fa fa-thumbs-o-down"></i></a>
<div style="display:inline-block" id="@dk">@item.DisLikeCmnt</div>
</div>