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

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

کاربر سایت

sadeghpa80

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

ارور Child actions are not allowed to perform redirect actions.

  • یکشنبه 4 آذر 1397
  • 02:25
تشکر میکنم

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

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

توی تمام صفحه ها لود میشه

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

رو میده

دیگه دیوانه ام کرده

 public ActionResult NewsLatter()
        {
            return PartialView();
        }
        [HttpPost]
        [AllowAnonymous]
        public ActionResult NewsLatter(NewsLatter newsLatter, string email)
        {
            if (_newsLatterRepository.GetNewsLatterByEmail(newsLatter.EmailAdressNewslatter))
            {
                TempData["MessageHeader"] = "عدم ثبت";
                TempData["AlertMessage"] = "ایمل شما در سیستم موجود است";
                return PartialView(newsLatter);
            }
            else
            {
                if (!ModelState.IsValid) return Redirect("/");
                newsLatter.Ip = _userIp;
                newsLatter.DateTime = DateTime.Now;
                newsLatter.EmailAdressNewslatter = email;
                _newsLatterRepository.InsertNewsLatter(newsLatter);
                _newsLatterRepository.Dispose();
                _db.Dispose();
                TempData["MessageHeader"] = "ثبت موفق";
                TempData["AlertMessage"] = "ایمل شما با موفقیت ثبت گردید";
                return PartialView();
            }

        }

اینم کد کنترلرم

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

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

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

ایمان مدائنی

عضویت از 1392/01/20

  • یکشنبه 4 آذر 1397
  • 09:05

احتمالا 2 تا تگ فرم داخل هم قرار گرفته اند 

در اون فرما باید خاصیت Action را پر کنید و یا جداشون کنید 

کاربر سایت

sadeghpa80

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

  • یکشنبه 4 آذر 1397
  • 11:41

نه من چک کردم 2 تگ فرم وجود نداره اصلا کلا توی layout و باقی view ها یدونه هم ندرم

اینم کد partialview هست

@model DataLayer.NewsLatter

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })

    <div class="widget  widget_text  push-down-30">
        <h6 class="footer__headings">خبرنامه ایمیلی</h6>
        <div class="textwidget" style="margin-bottom: 5px">
            <span class="wpcf7-form-control-wrap your-name">
                @Html.EditorFor(model => model.EmailAdressNewslatter, new { htmlAttributes = new { @class = "wpcf7-form-control wpcf7-text", placeholder = "عضویت در خبرنامه" } })
                @Html.ValidationMessageFor(model => model.EmailAdressNewslatter, "", new { @class = "text-danger" })
            </span>
        </div>
        <div class="textwidget">
            <input type="submit" value="ثبت ایمیل" class="wpcf7-submit btn btn-primary" />
        </div>
    </div>
}

کاربر سایت

sadeghpa80

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

  • یکشنبه 4 آذر 1397
  • 11:47

توی کد های پست اول آیا قسمت return درسته ؟
چون این رو مثلا میزارم return null باقی view ها درست میشن اما خود خبرنامه دیگه درست کار نمیکنه !

این رو میشه راهنماییم کنید

کاربر سایت

سهیل علیزاده

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

  • یکشنبه 4 آذر 1397
  • 12:46

متن خطا به شما می گوید شما در زمان رندر کردن یک child اکشن نمیتوان عملیات Redirect کردن رو انجام بدید به همین علت اجرا نمی شود شما درکدتون این کار رو انجام نداده اید پس معلوم میشود که این کار توسط قسمتی دیگر انجام می شود با بررسی کد شما متوجه شدم که شما بالای اکشن خود از صفت  AllowAnonymous استفاده نکرده اید و این Redirection مربوط به احراز هویت می باشد و میخواد شما را به صفحه لاگین منتقل کند که این کار در  child اشکن ها امکان پذیر نیست.

کاربر سایت

sadeghpa80

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

  • یکشنبه 4 آذر 1397
  • 13:36

من متوجه نشدم دقیقا

من الان بالای اکشن Post از صفت AllowAnonymous استفاده کردم ! الان بالای اکشن get هم استفاده کردم ولی بازم همون ارور رو میده .

من فکر میکنم مشکل از redirect هست که خودتون هم اشاره کردید.

چون من redirect null میزارم باقی صفحه ها دیگه ارور نمیدن ولی وقتی توی خبرنامه عضو میشم و ثبت رو میزنم میفرسته منو یه صفحه خالی

الان راه حل من چیه ؟

کاربر سایت

سهیل علیزاده

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

  • یکشنبه 4 آذر 1397
  • 15:19

نباید در Child اکشن Redirect کنید تنها مشکل شما همینه. در Partial View شما هم مشاهده میشود که کنترلر و نام اکشن رو به فرم نداده اید!

@using (Html.BeginForm())

پروژه را دیباگ کنید و بررسی کنید در کل فرآیند در کدام قسمت Redirect شدن انجام می شود. اگر موفق به انجام آن نشدید میتونید کدتون رو در GitHub قرار بدید تا بررسی کنیم.

کاربر سایت

sadeghpa80

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

  • یکشنبه 4 آذر 1397
  • 20:15

ممنون از شما توی خصوصی براتون پیام فرستادم و آدرس git رو فرستادم لطفا چک بفرمایید

سپاس

کاربر سایت

سهیل علیزاده

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

  • دوشنبه 5 آذر 1397
  • 09:59

کدی که قرار داده اید قابل اجرا نیست و بنده نمیتوانم آن را debug کنم. بهترین کار در این شرایط این است محل Redirect شدن را پیاده کنید و آن را جایگزین فرآیند دیگری کنید.

کاربر سایت

mahdiye_kh

عضویت از 1397/10/07

  • پنجشنبه 9 اسفند 1397
  • 01:18

برای منم همین ارور رو میداد ، فقط کافیه نام کنترلر و اکشن رو به فرم اعمال کنیم و درست میشه

using (Html.BeginForm("َActionName", "ControllerName"))

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

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

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

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