كيف يمكنني جعل منشئي الإدخال (MVC Contrib) يعملون مع Spark View Engine؟

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

سؤال

قضيت اليوم ثلاث ساعات جيدة في محاولة تحويل المشروع 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 واستخدام إصدار التطوير، لأنه تم تغييره مؤخرًا.يمكنك أيضًا تنزيل مصادر مستقرة وتغييرها بنفسك.وهنا بعض المعلومات:

http://groups.google.com/group/spark-dev/browse_thread/thread/618bd44a94368d22/f7df24e52924f4dc?show_docid=f7df24e52924f4dc

نصائح أخرى

أنت على المسار الصحيح من خلال إعداد منشئي الإدخال ثم محرك عرض الشرارة.يمكنك أن ترى من الملف المصدر من mvccontrib أنك بحاجة إلى تعريف مساحة الاسم MvcContrib.UI.InputBuilder.Views لكي تشير طريقة العرض الخاصة بك إلى ملحقات HtmlHelper الخاصة بمنشئي الإدخال.

http://github.com/mvccontrib/MvcContrib/blob/master/src/MVCContrib/UI/InputBuilder/Views/HtmlExtensions.cs

لقد كتبت منشئي الإدخال ولكني لا أعرف ما يكفي عن محرك عرض الشرارة لمعرفة سبب عدم حل الإشارة إلى طرق التوسعة لمنشئي الإدخال.

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