【问题标题】:How do I use Visual Studio 2010 MVC 3 for a non-html based project?如何将 Visual Studio 2010 MVC 3 用于非基于 html 的项目?
【发布时间】:2012-03-09 11:46:18
【问题描述】:

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

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

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

【问题讨论】:

  • 对于第 2 点 - 只需使用基本控制器类型并可能覆盖 OnResultExecuting 或 OnActionExecuting
  • @AndrasZoltan:啊,是的,我自己应该想到的……谢谢。

标签: visual-studio-2010 asp.net-mvc-3 vxml


【解决方案1】:

您可以基于 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】:

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

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

    【讨论】:

      【解决方案3】:

      open source project called VoiceModel 有一个框架,用于使用 ASP.NET MVC 3、Razor 和 C# 创建 VoiceXML 应用程序。它支持可重用的对话组件(RDC)并且非常灵活。在this blog 上有examples in the source code 和有关如何使用它的文档。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多