سؤال

كان لدي حل عملي باستخدام ASP.NET MVC Preview 3 (تمت ترقيته من حل Preview 2) الذي يستخدم ViewMasterPage غير مكتوب مثل:

public partial class Home : ViewMasterPage

يوجد في Home.Master بيان عرض مثل هذا:

<%= ((GenericViewData)ViewData["Generic"]).Skin %>

ومع ذلك، قام أحد المطورين في الفريق بتغيير مراجع التجميع إلى Preview 4.

بعد ذلك، لن يقوم الكود بعد الآن بملء بيانات ViewData بقيم مفهرسة مثل ما ورد أعلاه.

بدلاً من ذلك، تكون قيمة ViewData["Generic"] فارغة.

حسب هذا السؤال, ، يعمل ViewData.Eval("Generic")، ويتم أيضًا ملء ViewData.Model بشكل صحيح.

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

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

لدي حلول أخرى تستخدم نفس التقنية وتستمر في العمل.

هل هناك أي شيء يمكنك اقتراحه حول سبب توقف هذا فجأة عن العمل وكيف يمكنني إصلاحه (سيكون موضع تقدير أي تلميح في الاتجاه الصحيح)؟

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

المحلول

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

نصائح أخرى

لقد قررت استبدال كافة مثيلات ViewData["blah"] بـ ViewData.Eval("blah").ومع ذلك، أود أن أعرف سبب هذا التغيير إن أمكن للأسباب التالية:

  1. إذا حدث ذلك في مشاريعي الأخرى، فسيكون من الجيد أن أتمكن من إصلاحه.
  2. سيكون من الجيد ترك كود العمل المنشور وعدم استبداله بهذه التغييرات.
  3. سيكون من الجميل أن أعرف أنه لم يتغير شيء آخر لم ألاحظه.

كيف تقوم بإعداد بيانات العرض؟هذا يعمل بالنسبة لي:

مراقب:

ViewData["CategoryName"] = a.Name;

منظر:

<%= ViewData["CategoryName"] %>

راجع للشغل، أنا في المعاينة 5 الآن.لكن هذا نجح في 3 و 4 ...

يكرر:ريكي

أقوم فقط بتمرير كائن عندما أقوم باستدعاء طريقة العرض () من وحدة التحكم.

لقد لاحظت أيضًا أنه على خادمي المنشور حيث لم يتم تحديث أي شيء، يفشل ViewData.Eval ويعمل ViewData["index"].

على خادم التطوير الخاص بي، يفشل ViewData["index"] ويعمل ViewData.Eval...

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

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