2012-03-09 52 views
5

我想为基于电话的应用程序主机VXMLCCXML而不是HTML的Web项目使用Visual Studio 2010 MVC 3框架。如何为基于非HTML的项目使用Visual Studio 2010 MVC 3?

MVC 3似乎非常适合这种应用程序,我认为它是通用于VXML/CCXML的更广泛使用的基于jsp/Tomcat的应用程序的绝佳选择。但也有一对夫妇的烦恼:

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

对于第2点 - 只是使用基本控制器类型和覆盖,也许,OnResultExecuting或OnActionExecuting – 2012-03-09 11:54:04

+0

@AndrasZoltan:啊是的,我应该想到这个我自己......谢谢。 – BG100 2012-03-09 12:06:24

回答

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中的自定义生成提供程序将RECO gnize的.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插件,为这个自定义扩展提供语法突出显示和Intellisense。

+0

确切地说,我之后是......谢谢! – BG100 2012-03-09 12:49:57

2

对于2我推荐实现一个自定义的ActionResult,它将自动设置ContentType。有很多stackoverflow和谷歌的例子,将告诉你如何实现这一点。

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

相关问题