2012-03-09 6 views
5

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

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

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

для пункта 2 - просто используйте тип базового контроллера и переопределите, возможно, OnResultExecuting или OnActionExecuting –

+0

@AndrasZoltan: да, я должен был подумать об этом сам ... спасибо. – BG100

ответ

8

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

+0

Точно, что я был после .... спасибо! – BG100

2

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

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

1

Существует open source project called VoiceModel, который имеет структуру для создания приложений VoiceXML с использованием ASP.NET MVC 3, Razor и C#. Он поддерживает многоразовые диалоговые компоненты (RDC) и является чрезвычайно гибким. Есть examples in the source code и документация о том, как использовать его на this blog.