هل يمكنني تغيير قيمة قيمة المشاركة دون إعادة النشر؟

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

  •  19-09-2019
  •  | 
  •  

سؤال

يستخدم هذا ASP.NET 2.0 في عالم IIS 6.

لدي مستخدم يقدم نموذجا يرسل البيانات ليكون عبر البريد. الصفحة التي تتلقى البيانات تقوم ببعض الصحوبات البسيطة. إذا تم تمرير التحقق من الصحة، فإن روتين رمز مربع أسود يعمل بشكل أساسي يقرأ البيانات باستخدام طلب الطلب .form ("NameWere").

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

هل من الممكن تغيير قيمة عنصر على وظيفة HTTP؟

هل فعل أي شخص هذا؟

شكرا!

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

المحلول

على الرغم من أنها تتبع بعض الشيء، إلا أن هناك طريقة لتغيير قيمة متغير آخر.

يمكننا استخدام الانعكاس لتمييز Request.Form جمع كغير القراءة، قم بتغيير القيمة إلى ما نريده ونمنحه مرة أخرى ككائن مرة أخرى (حتى لا يمكن للأشخاص الآخرين تغيير القيم). استخدم الوظيفة التالية:

protected void SetFormValue(string key, string value)
{
  var collection = HttpContext.Current.Request.Form;

  // Get the "IsReadOnly" protected instance property.
  var propInfo = collection.GetType().GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);

  // Mark the collection as NOT "IsReadOnly"
  propInfo.SetValue(collection, false, new object[] { });

  // Change the value of the key.
  collection[key] = value;

  // Mark the collection back as "IsReadOnly"     
  propInfo.SetValue(collection, true, new object[] { });
}

لقد اختبرت الرمز على جهازي ويعمل بشكل جيد. ومع ذلك، لا يمكنني تقديم أي ضمانات أداء أو قابلية التشغيل.

نصائح أخرى

ومع ذلك، لا يمكن تغيير المنشور الحالي، فيمكنك إنشاء طلب مشاركة جديد وإعادة توجيه ذلك.

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

هناك بعض النفقات العامة من خلال هذا.

بقدر ما أتذكر، فإن جمع النموذج غير مرغوب فيه، أليس كذلك؟ لا تتذكر الهيكل الدقيق لكنني أعتقد ذلك

Request.Form("NameHere") = "newValue"

لن يعمل.

مع تحياتي

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