5

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

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

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

3 回答 3

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 中将识别.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 插件,为这个自定义扩展提供语法高亮和智能感知。

于 2012-03-09T12:24:57.983 回答
2

对于 2,我建议实现一个自定义 ActionResult,它会自动设置 ContentType。stackoverflow 和 google 上有很多示例,它们将向您展示如何实现这一目标。

对于 1,您不能只禁用“选项>文本编辑器>HTML>验证”下的“显示错误”选项

于 2012-03-09T12:07:24.863 回答
1

有一个名为 VoiceModel 的开源项目,它有一个使用 ASP.NET MVC 3、Razor 和 C# 创建 VoiceXML 应用程序的框架。它支持可重用的对话组件(RDC)并且非常灵活。源代码和文档中有关于如何在此博客上使用它的示例。

于 2012-03-09T13:40:02.367 回答