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

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

  1. 该项目尝试将我的 .cshtml 页面验证为 HTML(可以理解),或者我在“选项”>“文本编辑器”>“HTML”>“验证”>“目标”中设置的任何目标验证,但它强制我进行验证。我似乎找不到完全关闭它的方法。有没有办法将其关闭并防止数百个警告?或者更好的是,为 CCXML/VXML 编写我自己的自定义验证?
  2. 有没有办法自动将所有视图的内容类型设置为“text/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 上有很多示例,可以准确地向您展示如何实现这一目标。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top