如何将Visual Studio 2010 MVC 3用于非基于HTML的项目?

BG1*_*100 5 visual-studio-2010 vxml asp.net-mvc-3

我想将Visual Studio 2010 MVC 3框架用于托管VXMLCCXML的Web项目,而不是基于电话的应用程序的HTML.

MVC 3似乎非常适合这种应用程序,我认为它是通常用于VXML/CCXML的更广泛使用的基于jsp/Tomcat的应用程序的一个很好的替代品.但有一些烦恼:

  1. 该项目尝试将我的.cshtml页面验证为HTML(可理解),或者我在选项>文本编辑器> HTML>验证>目标中设置的任何目标验证,但它强制我进行验证.我似乎找不到完全关闭它的方法.有没有办法将其关闭并防止数百次警告?或者更好的是,为CCXML/VXML编写我自己的自定义验证?
  2. 有没有办法自动将所有视图的内容类型设置为"text/vxml",而无需Response.ContentType = "text/vxml";在每个Action方法中写入?

Dar*_*rov 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

并在Application_Start中声明自定义扩展:

RazorCodeLanguage.Languages.Add("vxml", new CSharpRazorCodeLanguage());
WebPageHttpHandler.RegisterExtension("vxml");
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new VXMLViewEngine());
Run Code Online (Sandbox Code Playgroud)

以及将识别.vxml扩展名的web.config中的自定义构建提供程序:

<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>
Run Code Online (Sandbox Code Playgroud)

现在您可以使用.vxml视图的扩展名.由于Visual Studio无法识别.vxml扩展名,因此当您使用它打开文件时,它不会给您带来警告.您甚至可以创建一个自定义VS插件,可以为此自定义扩展提供语法突出显示和Intellisense.