كيف يمكنني استخدام Visual Studio 2010 MVC 3 لمشروع غير مستند إلى HTML؟

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

سؤال

أرغب في استخدام إطار عمل Visual Studio 2010 MVC 3 لمشروع ويب يستضيف VXML و CCXML بدلاً من HTML للتطبيقات القائمة على الاتصالات الهاتفية.

يبدو MVC 3 مناسبًا بشكل مثالي لهذا النوع من التطبيقات، وأعتقد أنه بديل رائع للتطبيقات المستندة إلى jsp/Tomcat الأكثر استخدامًا والتي يتم استخدامها بشكل عام لـ VXML/CCXML.ولكن هناك بعض الإزعاجات:

  1. يحاول المشروع التحقق من صحة صفحات .cshtml الخاصة بي كـ HTML (أمر مفهوم)، أو أيًا كان التحقق من صحة الهدف الذي قمت بتعيينه في الخيارات>محرر النصوص>HTML>التحقق من الصحة>الهدف، لكنه يجبرني على التحقق من الصحة.لا يبدو أنني أجد طريقة لإيقافه تمامًا.هل هناك طريقة لإيقاف تشغيله ومنع مئات التحذيرات؟أو الأفضل من ذلك، كتابة التحقق المخصص الخاص بي لـ CCXML/VXML؟
  2. هل هناك طريقة لتعيين نوع المحتوى تلقائيًا على "نص/vxml" لجميع طرق العرض دون الحاجة إلى الكتابة Response.ContentType = "text/vxml"; في كل طريقة عمل؟
هل كانت مفيدة؟

المحلول

يمكنك كتابة محرك عرض مخصص استنادًا إلى محرك عرض Razor وتسجيل ملحق مخصص لطرق العرض الخاصة بك:

public class VXMLViewEngine : RazorViewEngine
{
    public VXMLViewEngine()
    {
        ViewLocationFormats = new[] { "~/Views/{1}/{0}.vxml", "~/Views/Shared/{0}.vxml" };
        MasterLocationFormats = new[] { "~/Views/{1}/{0}.vxml", "~/Views/Shared/{0}.vxml" };
        PartialViewLocationFormats = new[] { "~/Views/{1}/{0}.vxml", "~/Views/Shared/{0}.vxml" };
        FileExtensions = new[] { "vxml" };
    }

    protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath)
    {
        controllerContext.HttpContext.Response.ContentType = "text/vxml";
        return base.CreateView(controllerContext, viewPath, masterPath);
    }
}

وفي Application_Start أعلن عن الامتداد المخصص:

RazorCodeLanguage.Languages.Add("vxml", new CSharpRazorCodeLanguage());
WebPageHttpHandler.RegisterExtension("vxml");
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new VXMLViewEngine());

وموفر البنية المخصصة في web.config الذي سيتعرف على .vxml امتداد:

<compilation debug="true" targetFramework="4.0">
  <assemblies>
      ...
  </assemblies>
  <buildProviders>
    <add extension=".vxml" type="System.Web.WebPages.Razor.RazorBuildProvider, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  </buildProviders>
</compilation>

الآن يمكنك استخدام .vxml كامتداد للآراء.نظرًا لأن Visual Studio لا يتعرف على ملف .vxml امتدادا، عندما تفتح ملفا به، لن يزعجك بالتحذيرات.ويمكنك أيضًا إنشاء مكون إضافي VS مخصص يمكنه توفير تمييز بناء الجملة والتحسس الذكي لهذا الامتداد المخصص.

نصائح أخرى

لمدة 2 أوصي بتنفيذ ActionResult مخصص من شأنه تعيين ContentType تلقائيًا.هناك العديد من الأمثلة على Stackoverflow وGoogle التي ستوضح لك بالضبط كيفية تحقيق ذلك.

لسبب واحد، ألا يمكنك فقط تعطيل خيار "إظهار الأخطاء" ضمن "خيارات> محرر النصوص> HTML> التحقق من الصحة"

هناك مشروع مفتوح المصدر يسمى VoiceModel يحتوي على إطار عمل لإنشاء تطبيقات VoiceXML باستخدام ASP.NET MVC 3 وRazor وC#.وهو يدعم مكونات الحوار القابلة لإعادة الاستخدام (RDC) وهو مرن للغاية.هناك أمثلة في التعليمات البرمجية المصدر ووثائق حول كيفية استخدامه هذه المدونة.

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