ورود

View Full Version : سوال: این خطا واسه چیه؟کلافم کرده!!



پروگرامنویس
جمعه 25 اسفند 1396, 14:05 عصر
درود
میخوام مقدار ID پستی که براش کامنت گذاشته میشه رو به اکشن InsertComment بفرستم تا مقدارش در فیلد id_post جدول کامنت ها ذخیره بشه اما هر روشی که بکار گرغتم نشد که نشد!! این اروری که میده واسه چیه ؟و باید چجوری آی.دی پست رو تو اکشن درج دیدگاه بدست بیارم؟

اکشن های درج کامنت


public ActionResult InsertComment(object id)
{
ViewBag.idp = id;
return PartialView();
}
[HttpPost]
public ActionResult InsertComment(Comment cmnt)
{
if (Session["Captcha"] == null || Session["Captcha"].ToString() != cmnt.Capcha)
{
return MessageBox.Show("کد امنیتی درست نمی باشد!", MessageType.Alert, true);
}
CommentRepository rpCmnt = new CommentRepository();
if (ModelState.IsValid)
{
cmnt.Date = DateTime.Now.ToPersianDate().ToShortDateString();
cmnt.Time = DateTime.Now.ToPersianDate().ToShortTimeString();
cmnt.Is_show = false;
cmnt.Likes = 0;
cmnt.UnLikes = 0;
if (rpCmnt.Add(cmnt))
{
return MessageBox.Show("دیدگاه شما به درستی درج شد", MessageType.Success, true);
}
else
{
return MessageBox.Show("دیدگاه شما به درستی درج نشد", MessageType.Success, true);
}


}
else
{
return MessageBox.Show(ModelState.GetErrors(), MessageType.Warning, true);
}
}

پارشال ویو مربوط به فرم درج کامنت


@model Models.Comment


@using (Ajax.BeginForm("InsertComment", "Home", new AjaxOptions { HttpMethod = "Post", Url = "/Home/InsertComment" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true, "")


@Model.id_post= ViewBag.idp;

<div class="box-input">
<i class="fa fa-user"></i>
@Html.TextBoxFor(model =>model.Name, new { @class = "txt-cmnt" })
</div>
<div class="box-val">
@Html.ValidationMessageFor(p =>p.Name)
</div>
<div class="box-input">
<i class="fa fa-at"></i>
@Html.TextBoxFor(model => model.Email, "رایانامه", new { @class = "txt-cmnt" })
</div>
<div class="box-val">
@Html.ValidationMessageFor(p => p.Email)
</div>
<div class="box-input">
<i class="fa fa-link"></i>
@Html.TextBoxFor(model => model.Blog, "بلاگ", new { @class = "txt-cmnt" })
</div>
<div class="box-input">
<i class="fa fa-pencil"></i>
@Html.TextAreaFor(model => model.Text, new { rows = "10", @class = "txt-area" })
</div>
<div class="box-val">
@Html.ValidationMessageFor(p => p.Text)
</div>


<div class="box-input">
<i class="fa fa-barcode"></i>


<img src="@Url.Action("_CaptchaImage","Home")" id="capchaimg" class="img-capcha" alt="Alternate Text" />


<button type="submit" class="ref-capcha" id="refresh"><i class="fa fa-refresh"></i></button>


@Html.TextBoxFor(model => model.Capcha, "", new { @class = "txt-capcha", id = "txt-capcha" })
</div>
<div class="box-val">
@Html.ValidationMessageFor(p => p.Capcha)
</div>


<div class="box-input">
<button class="btn-cmnt" type="submit">درج دیدگاه</button>
</div>
}



view اصلی(نمایش پست)که دارم ازین طریق آی.دی پست روبفرستم به اکشن مربوطه




<!--درج دیدگاه-->
<div class="box-new-cmmnt">
@Html.Action("InsertComment", "Home", new {id=Model.oPost.ID });
</div>


و خطایی هم که میده اینه
147801
پیغام خطا هم تو ویژوال استودیو اینه:
Error executing child request for handler 'System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpH andlerAsyncWrapper'.

بگید چیکار باید کنمکلافم کرده

hakim22
جمعه 25 اسفند 1396, 15:11 عصر
قسمت @ رو بردارید :

@Model.id_post= ViewBag.idp;

پروگرامنویس
جمعه 25 اسفند 1396, 18:32 عصر
قسمت @ رو بردارید :

@Model.id_post= ViewBag.idp;

برداشتم اما نشد دوست گرامی.اینبار قبل از خطای قبلی این خطا رو هم نشون میده!
147802

اصلا میشه بگید خود شما برای بدست آوردن id_post برای درج کامنت چیکار میکنید یا اینکه درباره رفع این خطا لطفا کمک کنید؟ این مساله بظاهر ساده دو روزه وقت منو گرفته .سپاسگزار میشم کمکم کنید.

ali_md110
جمعه 25 اسفند 1396, 19:20 عصر
این قسمت پارامتر را چک کنید
میتونید مقدار viewBag را بجای Model.oPost.ID پاس بدید


new {id=Model.oPost.ID }

پروگرامنویس
جمعه 25 اسفند 1396, 20:10 عصر
این قسمت پارامتر را چک کنید
میتونید مقدار viewBag را بجای Model.oPost.ID پاس بدید


new {id=Model.oPost.ID }



سپاس .اگه اشتباه نکنم این قسمتی که اشاره میکنید مربوط به Html.Action ویو اصلی میشه ،درسته؟ خب تو این مرحله هنوز viewBag ایجاد نشده که بخوام بجای Model.oPost.ID ازش استفاده کنم،viewBag مورد نظر توسط مقداری که از Html.Action فرستاده میشه به اکشن InsertComment پر میشه!

حالا من یه کاری کردم ،تو پارشال ویو امدم از Html.Hidden استفاده کردم و فیلد id_post رو با مقدار viewBag پر کردم اینجوری:


int i = ViewBag.idp;
Html.HiddenFor(model=>model.id_post, new { value =i});

برک پوینت که میزنم تا پارشال ویو مقدار درون viewBag درسته اما همین که به اکشن پست InsertComment برای ذخیره در دیتابیس میره مقدار فیلد id_post برابر با صفر میشه؟!
147803

ali_md110
جمعه 25 اسفند 1396, 23:06 عصر
ViewBag مقدارش رو بعد از اولین دسترسی و خواندن از ذست میدهد میتنونید بجای اون ازTempData استفاده کنید و بهتر اینه
بجای viewbag یک ویومدل به پارشال ویو پاس بدید و مقدارش رو بخونید
یک مثال :
ویو مدل فرضی ما


public class Vmodel
{
public int Id { get; set; }
}

ابتدا یک اکشن بسازید


[ChildActionOnly]
public ActionResult InsertCommentPartial()
{
var m = new Vmodel {Id = 1234};
//پاس دادن به پاشال ویو
return PartialView("_InsertCommentPartial", m);
}

اکشن برای ثبت نظرات


public ActionResult InsertComment(Vmodel vm)
{

return View();
}


فراخوانی پارشال ویو در ویوی دلخواه


@Html.Action("InsertCommentPartial", "Home", new { area = "" })


کدهای پارشیال ویوی _InsertCommentPartial



@model Vmodel

@using (Html.BeginForm("InsertComment","Home", FormMethod.Post, new {id = "Form"}))
{
@Html.AntiForgeryToken()
@Html.HiddenFor(x=> x.Id)
<button type="submit">ثبت</button>


}

پروگرامنویس
شنبه 26 اسفند 1396, 15:10 عصر
دمتگرم! با
TempData درست شد!