首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将VisualStudio2010MVC 3用于非基于html的项目?

如何将VisualStudio2010MVC 3用于非基于html的项目?
EN

Stack Overflow用户
提问于 2012-03-09 11:46:18
回答 3查看 711关注 0票数 5

我想将VisualStudio2010MVC 3框架用于托管VXMLCCXML的web项目,而不是用于基于电话的应用程序。

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

  1. 该项目试图将我的.cshtml页面验证为HTML (可以理解),或者我在Options>Text Editor>HTML>Validation>Target中设置的任何目标验证,但它迫使我进行验证。我似乎想不出什么办法把它完全关掉。是否有办法关闭它并防止数百个警告?或者更好的是,为CCXML/VXML编写我自己的自定义验证?
  2. 是否有一种方法可以自动将所有视图的内容类型设置为"text/vxml“,而不必在每个操作方法中写入Response.ContentType = "text/vxml";
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-09 12:24:57

您可以基于Razor视图引擎编写自定义视图引擎,并为视图注册自定义扩展:

代码语言:javascript
复制
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中声明自定义扩展:

代码语言:javascript
复制
RazorCodeLanguage.Languages.Add("vxml", new CSharpRazorCodeLanguage());
WebPageHttpHandler.RegisterExtension("vxml");
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new VXMLViewEngine());

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

代码语言:javascript
复制
<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不识别.vxml扩展名,所以当您用它打开一个文件时,它不会给您带来警告。您甚至可以创建一个定制的VS插件,为这个自定义扩展提供语法突出显示和Intellisense。

票数 8
EN

Stack Overflow用户

发布于 2012-03-09 12:07:24

对于2,我建议实现一个自定义ActionResult,它将自动设置ContentType。关于堆栈溢出和google,有很多例子将向您展示如何实现这一目标。

对于1,您不能仅在"Options>Text Editor>HTML>Validation“下禁用”显示错误“选项吗?

票数 2
EN

Stack Overflow用户

发布于 2012-03-09 13:40:02

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9633537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档