كيف يمكنني جعل منشئي الإدخال (MVC Contrib) يعملون مع Spark View Engine؟
-
20-09-2019 - |
سؤال
قضيت اليوم ثلاث ساعات جيدة في محاولة تحويل المشروع MvcContrib.Samples.InputBuilders، المضمن في مساهمة MVC لجعله يعمل مع محرك سبارك فيو, ، لكنه لم يتمكن حتى الآن من القيام بذلك.
هل لدى أي شخص أدنى فكرة عن سبب عدم توافق هذين الاثنين؟
التغييرات التي قمت بها
نموذج الإدخال.سبارك:
<viewdata model="SampleInput" />
!{Html.InputForm()}
Global.asax.cs:
...
protected void Application_Start() {
RegisterRoutes(RouteTable.Routes);
InputBuilder.BootStrap();
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new SparkViewFactory());
}
تكوين الويب:
...
<spark>
<compilation debug="true"/>
<pages automaticEncoding="true">
<namespaces>
<add namespace="System"/>
<add namespace="System.Collections.Generic"/>
<add namespace="System.Linq"/>
<add namespace="System.Web.Mvc"/>
<add namespace="System.Web.Mvc.Ajax"/>
<add namespace="System.Web.Mvc.Html"/>
<add namespace="System.Web.Routing"/>
<add namespace="MvcContrib.UI.InputBuilder"/>
<add namespace="MvcContrib.UI.InputBuilder.Views"/>
<add namespace="Web.Models"/>
</namespaces>
</pages>
</spark>
(لقد قمت بنسخ مساحات الأسماء الثلاثة الأخيرة من نموذج المشروع.)
الأخطاء التي أحصل عليها
اعتمادًا على الترتيب الذي أقوم به بإعداد Spark/InputBuilder في Global.asax.cs، أحصل على استثناءين مختلفين.
إذا قمت أولاً بإعداد InputBuilder، ثم Spark (الكود الموضح أعلاه):
خطأ CS1061:'System.Web.Mvc.HtmlHelper' لا تحتوي على تعريف ل "نموذج الإدخال" ولا توجد طريقة تمديد "InputForm" قبول وسيطة أولى من النوع يمكن أن يكون "System.Web.Mvc.HtmlHelper" تم العثور على (هل تفتقد استخدام توجيه أو مرجع تجميع؟)
إذا قمت أولاً بإعداد Spark، ثم InputBuilder:
لا يمكن العثور على عرض "InputForm" أو سيده.تم البحث في المواقع التالية:
~/المشاهدات/الصفحة الرئيسية/InputForm.aspx
~/المشاهدات/المشتركة/InputForm.aspx
~/Views/InputBuilders/InputForm.aspx
~/المشاهدات/الصفحة الرئيسية/InputForm.ascx
~/المشاهدات/المشتركة/InputForm.ascx
المحلول
قم بتغيير input.spark إلى:
<use namespace="MvcContrib.UI.InputBuilder"/>
<use namespace="MvcContrib.UI.InputBuilder.Views"/>
<add namespace="Web.Models"/>
<viewdata model="SampleInput" />
!{Html.InputForm()}
لا تعمل الإضافة إلى web.config في Spark.يمكنك استخدام _global.spark بدلاً من ذلك.
هناك أيضا مشكلة أخرى.في Spark المستقر، SparkView Html
الملكية من النوع HtmlHelper
, ، لا HtmlHelper<TModel>
. Html.InputForm()
الوظيفة تعمل فقط من أجل HtmlHelper<TModel>
, ، لذلك سيتعين عليك تنزيل Spark source واستخدام إصدار التطوير، لأنه تم تغييره مؤخرًا.يمكنك أيضًا تنزيل مصادر مستقرة وتغييرها بنفسك.وهنا بعض المعلومات:
نصائح أخرى
أنت على المسار الصحيح من خلال إعداد منشئي الإدخال ثم محرك عرض الشرارة.يمكنك أن ترى من الملف المصدر من mvccontrib أنك بحاجة إلى تعريف مساحة الاسم MvcContrib.UI.InputBuilder.Views لكي تشير طريقة العرض الخاصة بك إلى ملحقات HtmlHelper الخاصة بمنشئي الإدخال.
لقد كتبت منشئي الإدخال ولكني لا أعرف ما يكفي عن محرك عرض الشرارة لمعرفة سبب عدم حل الإشارة إلى طرق التوسعة لمنشئي الإدخال.