سؤال

لنفترض أن لديك صفحة aspx لا تعتمد على الجلسة، ولكنها تعتمد على حالة العرض للثبات بين عمليات إعادة النشر.

إذا كان المستخدم يدخل إلى هذه الصفحة ويغادرها لتناول وجبة غداء طويلة، فهل ستظل حالة العرض صالحة عند عودته؟

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

المحلول

لا يتم الاحتفاظ بحالة العرض كجزء من عملية PostBack.ومع ذلك، يمكنك تجاوز SavePageStateToPersistenceMedium() وLoadPageStateFromPersistenceMedium() الخاص بفئة الصفحة، لتنفيذ هذا السلوك إذا رغبت في ذلك.لمزيد من المعلومات اقرأ فهم حالة عرض ASP.NET.

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

نصائح أخرى

وحالة العرض في حد ذاته لا تنتهي. منذ أن نشرت مرة أخرى في شكل، ويمكن تشكيلها في أي وقت.

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

وعلما بأنني لم يقله انتهائها. وكان ذلك MS الذين اقتبست في المادة الخاصة بعنوان السيطرة على حالة العرض

وحالة العرض لا تنتهي.

ويتم تخزين كافة البيانات حالة العرض على العميل ويقدم مرة أخرى إلى الخادم عند تنفيذ المستخدم إعادة النشر.

وهذا له بعض الآثار مثيرة جدا للاهتمام، وأوضح بدقة جدا <وأ href = "http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/truly-understanding-viewstate.aspx" يختلط = "noreferrer"> هنا .

وأيضا، كما مسكتك، افتراضيا ASP.NET تشفير حالة العرض مع مفتاح يتم إنشاؤه تلقائيا. وهذا يمكن أن يتم تجاوز مع العنصر MachineKey في ملف web.congif. على الرغم من حالة العرض حتى سوف لا تنتهي، يمكن أن تصبح غير صالح إذا تم استخدام مفتاح يتم إنشاؤه تلقائيا مختلفة فك تشفير حالة العرض، مثل بعد إعادة تعيين IIS، إعادة نشر تطبيق، أو ضرب خادم آخر في مزرعة على شبكة الإنترنت. إذا كنت تخطط لتخزين حالة العرض لفترات طويلة من الزمن، احترس كيف انها مشفرة / غير مشفرة.

http://msdn.microsoft.com/en-us/library/ ms998288.aspx

نعم، تنتهي صلاحية ViewState في ظروف معينة. على سبيل المثال، عندما تستخدم iframe:s، أو عندما تحافظ على اتصال "مباشر" بالخادم من خلال عمليات إعادة النشر المنتظمة.ثم قد ترغب في التحقيق في هذا الخيار: <sessionPageState historySize="9"/>, ، والذي في الواقع يرمز لعدد "نتائج إعادة النشر" المخزنة في الجلسة (إذا تم استخدام SessionPageStatePerster).يقوم كل إعادة نشر بتخزين حالة العرض الخاصة به في نهاية قائمة الانتظار في الجلسة["__VIEWSTATEQUEUE"]، ويحذف حالات العرض "القديمة جدًا".وكيف تعتقد أن SessionPageStatePerster يقرر أي من حالات العرض قديمة جدًا..عن طريق تكوين بعض ثوابت التاريخ التعسفي في web.config..يا إلهي!أنا أيضًا إلى الأبد لأجد هذه المشكلة ...كراهيتي لبرمجة asp.net لا توصف الآن..غرر...

وحالة العرض لا تنتهي، طالما أنها لا تزال على الصفحة، وسوف يكون لا يزال هناك والوظيفية.

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

وطالما كنت لا تعتمد على الدورة يجب أن لا يكون لديك أي مشاكل إعادة بناء دولة الصفحة. فإنه من السهل لاختبار رمز الدولة الصفحة الخاصة بك إذا كنت ترغب الرغم من: مجرد مجموعة جلسة العمل الخاصة بك أن تنتهي بعد 60 ثانية في الملف web.config الخاص بك، ثم تحميل الصفحة الخاصة بك، الانتظار أكثر من ذلك بقليل من دقيقة (ركوب الأمواج لأكثر من تجاوز المكدس والإجابة على بعض الأسئلة) ثم انقر فوق زر على الصفحة الخاصة بك.

نأسف لاستعادة هذا الموضوع القديم، ولكن المعلومات الجديدة متاحة الآن:

نعم، تنتهي صلاحية حالة العرض.لقد جئت من 19 ساعة من البحث حول مشكلة فقدان ViewStates لقيمها بين عمليات إعادة النشر بفواصل زمنية طويلة.لقد استغرق الأمر بعض الوقت في قراءة مستندات MSDN وإجابات Stackoverflow التي تقول إنه كان من المستحيل حدوث ذلك ما لم يتم استخدام تطبيق تخزين ViewState مخصص، وهو ما أعرف الآن أنه غير صحيح.

كانت مشكلتي تحدث في بيئة SharePoint 2013.الخدمة المعروفة باسم ذاكرة التخزين المؤقت الموزعة (الملقب ب. AppFabric) يقوم بالتخزين المؤقت لـ ViewState ويحتوي على الوقت للعيش المرتبطة به.يمكنك العثور على مزيد من المعلومات هنا:http://blogs.msdn.com/b/besidethepoint/archive/2013/03/27/appfabric-caching-and-sharepoint-1.aspx

يمكن العثور على المعلومات المثيرة للاهتمام في هذه العبارة:"لتحسين أداء الصفحة، بدءًا من SharePoint 2013، يقوم SharePoint بتخزين بيانات ViewState مؤقتًا من جانب الخادم بدلاً من نقلها ذهابًا وإيابًا إلى العملاء."

آمل أن تساعد هذه المعلومات شخصًا يائسًا جدًا كما كنت قبل 19 ساعة.

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

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

والجواب القصير هو: لا

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

ولا يتلقى لا حالة العرض expires.After إعادة توجيه إلى صفحة أخرى ثم قيمة حالة العرض فقدت أو تنتهي حالة العرض. لمزيد من التفاصيل HTTP: //www.c-sharpcorner كوم / UploadFile / 78d182 / الحية نت للدولة لإدارة تقنيات /

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