سؤال

لقد قمت بتحويل تطبيق الويب الخاص بي من الإصدار التجريبي 3 إلى الإصدار التجريبي 1 وأحاول الآن استخدام الوظائف الجديدة لإطار العمل.واحد منهم هو ModelBinding.

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

  • من أين أبدأ؟هل هذا السلوك خارج المربع أم أقوم بتنفيذ searchbagbinder؟لقد ألقيت نظرة سريعة على imodelbinder لكن لا يمكنني لف رأسي حوله ، ولا يجعلني مصدر DefaultModelBinder أكثر حكمة.
  • ما هو هذا ModelBindingContext؟
  • كيف يمكنني الوصول إلى حقول النموذج الخاصة بي؟
  • ماذا لو لم يتم تمرير القيم بواسطة نموذج بل عن طريق إدخال عنوان URL مباشرة؟
  • أين أجد معلومات محدثة عن هذا (معظم المدونات عفا عليها الزمن)؟اعتقدت أنني قرأت منشورًا من قبل Phil في وقت واحد ، لكن لا يمكنني العثور عليه بعد الآن.

هو موضع تقدير أي مساعدة.

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

المحلول

  • من أين أبدأ؟هل هذا السلوك خارج المربع أم أقوم بتنفيذ searchbagbinder؟لقد ألقيت نظرة سريعة على imodelbinder لكن لا يمكنني لف رأسي حوله ، ولا يجعلني مصدر DefaultModelBinder أكثر حكمة.

إنه خارج الصندوق.يمكنك إما استخدام UpdateModel أو ModelBinder لتحقيق ما تريد القيام به.

  • ما هو هذا ModelBindingContext؟

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

  • كيف يمكنني الوصول إلى حقول النموذج الخاصة بي؟
context.HttpContext.Request.Forms["myformfield"];

أو

foreach (var field in context.HttpContext.Request.Forms.Keys) {
    var value = context.HttpContext.Request.Forms[field];
}
  • ماذا لو لم يتم تمرير القيم بواسطة نموذج بل عن طريق إدخال عنوان URL مباشرة؟

إذا كنت بحاجة إلى التحقق من كل من النموذج وQueryString، فما عليك سوى تكرار كلتا المجموعتين.

foreach (var field in context.HttpContext.Request.Forms.Keys) {
    var value = context.HttpContext.Request.Forms[field];
}
foreach (var field in context.HttpContext.Request.QueryStrings.Keys) {
    var value = context.HttpContext.Request.QueryStrings[field];
}

أو يمكنك التكرار عبر Param الذي سيحتوي على النموذج وسلسلة الاستعلام والرؤوس وما إلى ذلك.

foreach (var field in context.HttpContext.Request.Params.Keys) {
    var value = context.HttpContext.Request.Params[field];
}
  • أين أجد معلومات محدثة حول هذا*(معظم المدونات عفا عليها الزمن)؟اعتقدت أنني قرأت منشورًا من قبل فيل في وقت واحد ، لكن لا يمكنني العثور عليه بعد الآن.

لقد صدقت، فيل هو أفضل مكان للحصول على المعلومات باعتباره مديرًا لـ ASP.NET MVC.

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