2012-03-09 51 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>驗證」

相關問題