Как использовать Visual Studio 2010 MVC 3 для не основанного на HTML проекта? - PullRequest
5 голосов
/ 09 марта 2012

Я хотел бы использовать среду Visual Studio 2010 MVC 3 для веб-проекта, в котором размещены VXML и CCXML вместо HTML для приложений на основе телефонии.

MVC 3 кажется идеально подходящим для такого рода приложений, и я думаю, что это отличная альтернатива более широко используемым приложениям на основе jsp / Tomcat, которые обычно используются для VXML / CCXML.Но есть несколько неприятностей:

  1. Проект пытается проверить мои .cshtml-страницы как HTML (понятно) или любую другую проверку цели, которую я установил в Параметры> Текстовый редактор> HTML> Проверка> Цель,но это заставляет меня проходить валидацию.Кажется, я не могу найти способ полностью его отключить.Есть ли способ отключить его и предотвратить сотни предупреждений?или, что еще лучше, написать свою собственную пользовательскую проверку для CCXML / VXML?
  2. Есть ли способ автоматически установить тип содержимого "text / vxml" для всех представлений без необходимости писать Response.ContentType = "text/vxml"; в каждом действииМетод?

Ответы [ 3 ]

8 голосов
/ 09 марта 2012

Вы можете написать собственный механизм представления на основе механизма представления 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, который мог бы обеспечить подсветку синтаксиса и Intellisense для этого пользовательского расширения.

2 голосов
/ 09 марта 2012

Для 2 я рекомендую реализовать пользовательский ActionResult, который бы автоматически устанавливал ContentType. Существует множество примеров использования stackoverflow и google, которые точно покажут вам, как этого добиться.

Для 1 нельзя просто отключить опцию «Показать ошибки» в «Параметры> Текстовый редактор> HTML> Проверка»

1 голос
/ 09 марта 2012

Существует проект с открытым исходным кодом под названием VoiceModel , в котором есть структура для создания приложений VoiceXML с использованием ASP.NET MVC 3, Razor и C #. Он поддерживает многоразовые диалоговые компоненты (RDC) и чрезвычайно гибок. В исходном коде приведены примеры и документация по его использованию в этом блоге .

...