سؤال

أحاول استخدامها لاستخدام clientscriptmanager.registerforvaltation لتسجيل حقل مخفي وقيمة أنا أضيف مع clientcriptmanager.registerhiddenfield. أفعل هذا خلال حدث تقديم. لا أحصل على خطأ، لكن ASP.NET 2.0 لا يبدو أن التحقق من صحة الحقل. يمكنني تغيير قيمة أو حذف كل من ملحق الحقل بأكمله باستخدام Firefox و Firebug، ولن يتم إلقاء خطأ ASP.NET خطأ مثله.

نموذج التعليمات البرمجية من فئة صفحة مخصصة:

protected override void Render(HtmlTextWriter writer)
{
    ClientScript.RegisterHiddenField("stuff", "things");
    ClientScript.RegisterForEventValidation("stuff", "things");
    base.Render(writer);
}

تتم إضافة الحقل المخفي إلى الصفحة، لكن ASP.NET غير التحقق من صحة الحقل أو القيمة عند إعادة النشر. ماذا ينقصني؟

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

المحلول

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

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

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

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