هل يقوم RedirectToAction بإعادة التوجيه باستخدام معلمات الاستعلام؟
-
28-10-2019 - |
سؤال
أنا أعمل على تطبيق ASP.NET MVC وواجهت شيئًا غريبًا.
حصلت على إجراءين للتحكم مثل هذا:
[CustomAuthorize(Roles = SiteRoles.Admin)]
public ActionResult Review(int? id)
[CustomAuthorize(Roles = SiteRoles.Admin)]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Review(AdReview data)
أولا أتصل ب Review
الإجراء مع null كمعلمة، سيؤدي ذلك إلى ظهور صفحة ويب تحتوي على قائمة بالعناصر.يتم ربط العناصر مرة أخرى بإجراء المراجعة الأول باستخدام مجموعة المعرفات.
عند تقديم المعرف لإجراء المراجعة، سيتم إرجاع صفحة ويب للتعديل لهذا العنصر.عند الضغط على إرسال بعد بعض التغييرات، سننتهي في إجراء المراجعة الثاني (المنشور).هنا سيتم حفظ العنصر.
كل شيء على ما يرام حتى الآن.
الآن، في إجراء المراجعة الأخير (المنشور)، حصلت على الكود التالي في النهاية:
return RedirectToAction("Review", "Ad");
سيؤدي هذا إلى تشغيل إجراء المراجعة الأول مرة أخرى، والمشكلة هي أنه سيوفر المعرف السابق؟كان تفكيري هو أن RedirectToAction لن يوفر أي معلمات؟
المحلول
كان تفكيري هو أن RedirectToAction لن يوفر أي معلمات؟
فهمك خاطئ.تتم إعادة توجيه المعلمات الموجودة في حالة النموذج تلقائيًا إذا كان عنوان url المستهدف يحتوي على معلمة مسار بنفس الاسم.في هذه الحالة لديك id
المعلمة التي يتم نشرها (ربما كجزء من حقل إدخال أو جزء من عنوان url) وعند إعادة التوجيه مرة أخرى إلى إجراء الفهرس الأصلي، لأن تعريفات المسار الخاصة بك تحتوي على id
رمز مميز في نهاية RedirectToAction
الطريقة سوف تملأها.
كحل بديل لتجنب هذا السلوك، يمكنك تحديد صراحة أن id
لا ينبغي إرسال المعلمة عند إعادة التوجيه:
return RedirectToAction("Index", "Ad", new { id = "" });