سلام من توی سایتم
قسمت خبرنامه در Layout هست و خودش یه PartialView
اون دکمه ارسال اطلاعات هم یه صفحه view دیگست که از روی مدل خودش ساخته شده
ولی وقتی میخواد صفحه ارسال بشه میره به کنترلر عضویت در خبرنامه ! در حالی که باید بره به کنترلر خودش !
علتش چیه ؟
کدهاتون رو قرار بدید تا برررسی کنیم.
کدView
@model DataLayer.Employment @{ ViewBag.Title = "Employment"; } @using (Html.BeginForm("Employment", "AllPages", FormMethod.Post, new { enctype = "multipart/form-data" })) { @Html.AntiForgeryToken() <div class="master-container"> <div class="container"> <div class="row"> <div class="hentry container" role="main"> <div class="spacer"></div> <div class="row"> <div class="col-md-3"></div> <div class="col-md-6"> <div class="wpcf7" id="wpcf7-f5-o1" dir="rtl" lang="en-US"> <div class="row"> <div class="col-xs-12 col-sm-12 col-md-12"> @Html.ValidationSummary(true, "", new { @class = "text-danger" }) <div class="form-group row"> @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-sm-9"> @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "wpcf7-form-control wpcf7-text", placeholder = "نام ونام خانوادگی" } }) @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" }) </div> </div> <div class="form-group row"> @Html.LabelFor(model => model.FatherName, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-sm-9"> @Html.EditorFor(model => model.FatherName, new { htmlAttributes = new { @class = "wpcf7-form-control wpcf7-text", placeholder = "نام پدر" } }) @Html.ValidationMessageFor(model => model.FatherName, "", new { @class = "text-danger" }) </div> </div> <div class="form-group row"> @Html.LabelFor(model => model.NationalId, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-sm-9"> @Html.EditorFor(model => model.NationalId, new { htmlAttributes = new { @class = "wpcf7-form-control wpcf7-text", placeholder = "کد ملی بدون خط تیره" } }) @Html.ValidationMessageFor(model => model.NationalId, "", new { @class = "text-danger" }) </div> </div> <div class="form-group row"> @Html.LabelFor(model => model.ImageName, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-sm-9"> <div class="form-group"> <input type="file" name="imgUp" /> @Html.ValidationMessageFor(model => model.ImageName, "", new { @class = "text-danger" }) </div> </div> </div> <div class="form-group row"> <div class="col-sm-3"> </div> <div class="col-md-9"> <input type="submit" value="ارسال اطلاعات" class="wpcf7-form-control wpcf7-submit btn btn-primary" /> </div> </div> <div class="form-group row"> <div class="col-sm-12"> </div> </div> </div> </div> </div> </div> <div class="col-md-3"></div> </div> </div> </div> </div> </div> }
کد کنترلر view بالا
[Route("Employment")] public ActionResult Employment() { return View(); } [HttpPost] public ActionResult Employment(Employment employment, HttpPostedFileBase imgUp) { employment.Ip = GetIp(); employment.DateTime = DateTime.Now; employmentRepository.InsertEmployment(employment); return RedirectToAction("Employment", "AllPages"); }
اینم کد Partial اون یکی صفحه که با این قاطی میشه
public ActionResult NewsLatter() { return PartialView(); } [HttpPost] public ActionResult NewsLatter(NewsLatter newsLatter) { if (newsLatterRepository.GetNewsLatterByEmail(newsLatter.Email)) { return RedirectToAction("NewsLatter"); } newsLatter.Ip = GetIp(); newsLatter.DateTime = DateTime.Now; newsLatterRepository.InsertNewsLatter(newsLatter); return RedirectToAction("Index"); }
این Partial اصلا تو یه کنترلریگه هست و توی Layout فراخوانی شده
ولی اون یکی view هست که فقط داره از Layout استفاده میکنه
ارور child actions are not allowed to perform redirect actions میده وقتی view رو اجرا میکنم
شما میخواید بعد عضو شدن در خبرنامه به همون صفحه ای که ازش بوده منتقل شه ؟
اگر میخواید به صفحه اصلی سایت منتقل شه به این شکل عمل کنید:
return Redirect("/");
اگر میخواید به صفحه ای که از آن اطلاعات ارسال شده منتقل شوید به این شکل عمل کنید:
return Redirect(Request.UrlReferrer?.ToString() ?? "/");
ممنون
اما بابت اینکه من توی یه view دیگه ای هستم و هنگام submit میره اون action که توی layout هست رو اجرا میکنه علتش چیه ؟action پایین رو
<div class="col-xs-12 col-md-4"> @Html.Action("NewsLatter","Home") </div>
بعد هم ارور child actions are not allowed to perform redirect actions میده
شما در کد زیر به یک child action (اکشنی متدی که یک Partial بازگردانی می کند) Redirect کردید به همین دلیل این خطا رو دریافت می کنید.
باید به اکشنی redirect کنید که partial View بازگردانی نکند از کد هایی که قرار دادم استفاده کنید.
if (newsLatterRepository.GetNewsLatterByEmail(newsLatter.Email)) { return RedirectToAction("NewsLatter"); }
متاسفانه احساس میکنم متنی که نوشتید یکم قاطی شده کلماتش تو هم چون زیاد نفهمیدم
این خط کد میره چک میکنه اگه قبلا طرف ایمیلش رو ثبت کرده بود فعلا هیچ عکس العملی نشون نده
شما میفرمایید که اینجا نباید RedirectToAction(
"NewsLatter"
); کنم ؟
باید از return Redirect("/"); استفاده کنم ؟
اصلاح شد.
متاسفانه درست نشد
ببینید من یک بار دیگه مشکلم رو عرض کنم
من یه Controller دارم که توش چند تا PartialView و View دارم
یکی از این Partial ها برای عضویت در خبرنامه هست که توی Layout فراخونی شده با این کد
@Html.Action("NewsLatter", "Home")
حالا توی یکی دیگه View هام میخوام فرم رو بفرستم به کنترلر Home از این خط بالا که اون Partial فراخونی شده ایراد میگیره و پیغام Child actions are not allowed to perform redirect actions. میده .
اون کدهایی که شما بالا نوشتید هم جایگزین کردم اما فایده نداشت
ممنون میشم راهنماییم بفرمایید
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)