سؤال

بادئ ذي بدء بعض السياق:

لدي نموذج ، حيث أقوم بنشر بعض الكائنات التي يتم تجسيدها تلقائيًا في كائنات بواسطة MVCS ModelBinder المدمجة:

<input type="hidden" name="myobj[0].Id" />
<input type="text" name="myobj[0].Hours" />
<input type="hidden" name="myobj[1].Id" />
<input type="text" name="myobj[1].Hours" />

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Save(IList<MyObject> myobj);

بالإضافة إلى ذلك: أود أن أؤكد أننا ننشر على DTO (DataTransferObjects) أن نقوم بزيادة خريطة الخط في كيانات إطار الكيان ، لذلك نفضل عدم تغيير أي شيء على DTO باستثناء إضافة السمات.

مشكلة

إذا دخل المستخدم إلى قيمة غير صالحة لـ "ساعات" ، فقل "Fubar" ، فلن يحاول ModelBinder بشكل طبيعي تعيين "ساعات". لكنه يتخلف عن 0 ، لأنه int وليس سلسلة.

هذا يسبب بعض الصعوبة بالنسبة لي ، لأنه الآن لا يمكنني معرفة ما إذا كان المستخدم قد أدخل بالفعل 0 ، أو إذا كان هذا بسبب إدخال غير صالح.

نظرًا لأنني أستخدم خريطة كائن إلى كائن إلى مرتبة في المنزل (إطار عمل كيان) ، لا يمكننا تغيير طباعة القدم الخاصة بـ "الساعات" int؟. أدرك أن MVC لديها بعض التحقق من الصحة ، لكننا نفضل عدم تنفيذ ذلك نظرًا لأننا نعلم أنه قد تعرض للهجوم بشكل كبير وأن هناك بعض التحقق الجديد من صحة ASP.NET MVC 2.0.

المحلول؟

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

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

ماذا تقترح؟

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

المحلول

هذا يسبب بعض الصعوبة بالنسبة لي ، لأنه الآن لا يمكنني معرفة ما إذا كان المستخدم قد أدخل بالفعل 0 ، أو إذا كان هذا بسبب إدخال غير صالح.

نعم يمكنك. انظر في نموذج الطراز.

نصائح أخرى

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

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