ذكرت الموديلات غير صالحة للخصائص الخاصة على نموذج في ASP.NET MVC 2

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

سؤال

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

حسنا، لدي مستخدمي نظيف Poco في مكتبة الدرجة النموذجية ...

giveacodicetagpre.

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

يمكنني الحصول على "فئة الأصدقاء" التي تحدد بيانات تعريف التحقق من الصحة للحصول على فئة مستخدمي ...

giveacodicetagpre.

}

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

giveacodicetagpre.

هذا له وجهة نظر مكتوبة بشدة للذهاب معها ...

giveacodicetagpre.

حسنا، لذلك كل هذا الرمز في الطريق!

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

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

حسنا الحلول الممكنة التي وصلت إليها حتى الآن ..

جعل العقار العام.

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

أزل الخطأ

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

اكتب بقوة وجهة نظري مقابل واجهة

لقد قرأت أن بعض الأشخاص يربطون وجهة نظرهم إلى واجهة نموذجهم، وهذا هو ملك واجهة نموذجية على كائن نموذج الأعمال. أنا أحب هذه الفكرة، لكنني فقدت الربط التلقائي وستحتاج إلى تكرار كائنات نموذجي مع منشئتهم في طبقة الويب الخاصة بي، لست متأكدا من ذلك؟! بعض المعلومات حول هذا هنا http://www.codethinked.com/post/04/12/easy-and-safe-model-binding-in-aspnet-mvc.aspx .

استخدام المشاهدات النموذجية

هذا فقط لا يبدو أنه يجف لي؟! أنا سعيد لاستخدام هذه إذا لم يكن لدي كائن طراز موجود يناسب (على سبيل المثال، فأني استخدم عرض نموذج تسجيل).

custommodelbinder

الخيار المفضل لدي، لكنني لست متأكدا من أنني أعرف ما أفعله !! إذا كان بإمكاني الحصول على الموثق فقط لربط الخصائص فقط، فيمكنك ضبطها، ثم سأضحك!

ماذا يعتقد الناس؟ تعليقات على الخيارات المذكورة أعلاه، أي حلول أخرى، أنا فقط خارج العلامة مع بنية بلدي؟

شكرا :)

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

المحلول 3

قام JFAR بنشر رابط جيد إلى منشور براد ويلسون حيث تعليقات براد ...

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

  • استخدم نموذج العرض الذي يعكس تماما بيانات النموذج

  • قبل املأ [مطلوب] ولكن الحقول غير المنفصلة مع البيانات قبل الاتصال (حاول) UpdateModel بحيث ستنجح التحقق من الصحة (على الرغم من أنت لا تنوي أن تفعل أي شيء مع هذه البيانات)

  • اسمح بتحدث أخطاء التحقق من الصحة، ثم قم بإزالتها modelstate بعد انتهاء التحقق من الصحة، لأنها أخطاء غير ملائمة.

يبدو أن حالتي تتناسب مع حالة "التحرير الجزئي"، حيث لا أريد تحديث حقول معينة.

سأبحث في هذه الحلول.

نصائح أخرى

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

اقرأ المزيد حول قرار التصميم هذا هنا:

P> http : //bradwilson.typepad.com/blog/mall/01/input-validation-vs-model-validation-in-aspnet-mvc.html

بشكل مثير للاهتمام، يشكو معظم الناس من عكس ما يشكو به. ؛)

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


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

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

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

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

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