مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

sadeghpa80

عضویت از 1392/09/18

راهنمایی برای قاطی شدن Action ها تو هم

  • شنبه 12 اسفند 1396
  • 18:29
تشکر میکنم

سلام من توی سایتم

قسمت خبرنامه در Layout هست و خودش یه PartialView

اون دکمه ارسال اطلاعات هم یه صفحه view دیگست که از روی مدل خودش ساخته شده

ولی وقتی میخواد صفحه ارسال بشه میره به کنترلر عضویت در خبرنامه ! در حالی که باید بره به کنترلر خودش !

علتش چیه ؟

پاسخ های این پرسش

تعداد پاسخ ها : 11 پاسخ
کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • شنبه 12 اسفند 1396
  • 18:31

کدهاتون رو قرار بدید تا برررسی کنیم.

کاربر سایت

sadeghpa80

عضویت از 1392/09/18

  • شنبه 12 اسفند 1396
  • 19:09

کد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>
}

کاربر سایت

sadeghpa80

عضویت از 1392/09/18

  • شنبه 12 اسفند 1396
  • 19:11

کد کنترلر 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");
        }

کاربر سایت

sadeghpa80

عضویت از 1392/09/18

  • شنبه 12 اسفند 1396
  • 19:11

اینم کد 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 استفاده میکنه

کاربر سایت

sadeghpa80

عضویت از 1392/09/18

  • شنبه 12 اسفند 1396
  • 23:32

ارور child actions are not allowed to perform redirect actions میده وقتی view رو اجرا میکنم

کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • یکشنبه 13 اسفند 1396
  • 10:33

شما میخواید بعد عضو شدن در خبرنامه به همون صفحه ای که ازش بوده منتقل شه ؟

اگر میخواید به صفحه اصلی سایت منتقل شه به این شکل عمل کنید:

   return Redirect("/");

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

      return Redirect(Request.UrlReferrer?.ToString() ?? "/");

کاربر سایت

sadeghpa80

عضویت از 1392/09/18

  • یکشنبه 13 اسفند 1396
  • 13:14

ممنون

اما بابت اینکه من توی یه 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 میده

کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • یکشنبه 13 اسفند 1396
  • 14:21

شما در کد زیر   به یک child action (اکشنی متدی که یک Partial بازگردانی می کند) Redirect کردید  به همین دلیل این خطا رو دریافت می کنید. 

باید به اکشنی redirect کنید که partial View بازگردانی نکند از کد هایی که قرار دادم استفاده کنید.

  if (newsLatterRepository.GetNewsLatterByEmail(newsLatter.Email))
            {
                return RedirectToAction("NewsLatter");
            }

کاربر سایت

sadeghpa80

عضویت از 1392/09/18

  • یکشنبه 13 اسفند 1396
  • 17:07

متاسفانه احساس میکنم متنی که نوشتید یکم قاطی شده کلماتش تو هم چون زیاد نفهمیدم

این خط کد میره چک میکنه اگه قبلا طرف ایمیلش رو ثبت کرده بود فعلا هیچ عکس العملی نشون نده

شما میفرمایید که اینجا نباید RedirectToAction("NewsLatter"); کنم ؟

باید از return Redirect("/"); استفاده کنم ؟

کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • یکشنبه 13 اسفند 1396
  • 17:18

اصلاح شد.

کاربر سایت

sadeghpa80

عضویت از 1392/09/18

  • چهارشنبه 16 اسفند 1396
  • 16:21

متاسفانه درست نشد

ببینید من یک بار دیگه مشکلم رو عرض کنم

من یه Controller دارم که توش چند تا PartialView و View دارم

یکی از این Partial ها برای عضویت در خبرنامه هست که توی Layout فراخونی شده با این کد

@Html.Action("NewsLatter", "Home")

حالا توی یکی دیگه View هام میخوام فرم رو بفرستم به کنترلر Home از این خط بالا که اون Partial فراخونی شده ایراد میگیره و پیغام Child actions are not allowed to perform redirect actions.  میده .

اون کدهایی که شما بالا نوشتید هم جایگزین کردم اما فایده نداشت

ممنون میشم راهنماییم بفرمایید

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)