كيف أحافظ على قيمة التصنيف من خلال Response.redirect؟

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

  •  01-07-2019
  •  | 
  •  

سؤال

وهنا الوضع:لدي مجموعة نصية للتصنيف، متبوعة مباشرة باستدعاء Response.redirect() كما يلي (هذا مجرد مثال، لكنني أعتقد أنه يصف موقفي بدقة):

أسبكس:

<asp:Label runat="server" Text="default text" />

الكود الخلفي (الكود الذي يتم استدعاؤه عند حدث عند النقر):

Label.Text = "foo";
Response.Redirect("Default.aspx");   

عندما يتم عرض الصفحة، تظهر التسمية "النص الافتراضي".ما الذي يجب علي فعله بشكل مختلف؟ما فهمته هو أن مثل هذه التغييرات سيتم إجراؤها تلقائيًا خلف الكواليس، ولكن على ما يبدو ليس في هذه الحالة.شكرًا.

للحصول على خلفية إضافية بسيطة، يتم استدعاء مقتطف الكود الخلفي داخل الطريقة التي يتم استدعاؤها عند حدث عند النقر.هناك ما هو أكثر من ذلك، لكنني أدرجت فقط ما هو مهم في هذه القضية.

هل كانت مفيدة؟

المحلول

بعد إعادة التوجيه، ستفقد أي معلومات حالة مرتبطة بعناصر التحكم الخاصة بك.إذا كنت تريد ببساطة تحديث الصفحة، فقم بإزالة إعادة التوجيه.بعد الانتهاء من تنفيذ التعليمات البرمجية، سيتم تحديث الصفحة وسيتم الاحتفاظ بأي حالة.

يعمل هذا خلف الكواليس لأن ASP.NET يكتب معلومات الحالة إلى حقل إدخال مخفي في الصفحة.عند النقر فوق زر، يتم نشر النموذج ويقوم ASP.NET بفك تشفير حالة العرض.يتم تشغيل التعليمات البرمجية الخاصة بك، وتعديل الحالة، وبعد ذلك تتم كتابة الحالة مرة أخرى في الحقل المخفي وتستمر الدورة، حتى تقوم بتغيير الصفحة بدون مشاركة.يمكن أن يحدث هذا عند النقر فوق ارتباط تشعبي إلى صفحة أخرى، أو عبر Response.Redirect()، الذي يوجه المتصفح إلى اتباع عنوان URL المحدد.

نصائح أخرى

أ Response.Redirect ستطلب المكالمة من متصفح المستخدم تحميل الصفحة المحددة في عنوان URL الذي قدمته له.نظرًا لأن هذا طلب جديد لصفحتك، فإن الصفحة تستخدم النص الموجود في الترميز الخاص بك (كما أفترض أنه يتم تعيين نص التسمية داخل معالج الزر أو ما شابه).

إذا قمت بإزالة Response.Redirect اتصل بصفحتك يجب أن تعمل كما هو معلن.

ASP وASP.Net عديمي الجنسية بطبيعتهما ما لم يتم تحديد الحالة بشكل صريح.عادةً ما يتم تضمين معلومات بين PostBacks مثل قيمة التسمية في حالة العرض، ولكن إذا قمت بتغيير الصفحات، فسيتم فقدان حالة العرض هذه لأنه تم تخزينها في حقل مخفي في الصفحة.

إذا كنت تريد الحفاظ على قيمة التسمية بين المكالمات، فأنت بحاجة إلى استخدام إحدى آليات الحالة (على سبيل المثال.الجلسة، التفضيلات) أو أنظمة الاتصال (الطلب (GET، POST)).

بالإضافة إلى ذلك، قد تكون تبحث عن Server.Transfer الذي سيغير من يقوم بمعالجة الصفحة خلف الكواليس.تم تصميم Response.Redirect للتخلص من سياقك الحالي في معظم الحالات.

لاستمرار الحالة، استخدم Server.Transfer بدلاً من Response.Redirect.

لذا، إذا كان بإمكاني الإجابة على سؤالي الخاص (وفقًا للأسئلة الشائعة، فهذا أمر مشجع)، فالإجابة المختصرة هي أنك لا تستمر في عرض الحالة من خلال عمليات إعادة التوجيه.حالة العرض مخصصة لعمليات إعادة النشر، وليس عمليات إعادة التوجيه.

علاوة: كل ما تريد معرفته عن عرض الحالة في ASP.NET, ، مع الصور!

لما يستحق (ونأمل أن يستحق شيئًا ما)، الفصل السادس من Pro ASP.NET 3.5 في C# 2008، الإصدار الثاني هو مورد رائع حول هذا الموضوع.الكتاب كله كان رائعا حتى الآن.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top