هل يقوم RedirectToAction بإعادة التوجيه باستخدام معلمات الاستعلام؟

StackOverflow https://stackoverflow.com/questions/7379515

سؤال

أنا أعمل على تطبيق 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 = "" });
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top