2012-03-09 24 views
5

Tôi muốn sử dụng khung công tác Visual Studio 2010 MVC 3 cho một dự án web lưu trữ VXMLCCXML thay vì HTML cho các ứng dụng dựa trên điện thoại.Làm cách nào để sử dụng Visual Studio 2010 MVC 3 cho dự án không dựa trên html?

MVC 3 có vẻ phù hợp lý tưởng với loại ứng dụng này, và tôi nghĩ nó là một lựa chọn tuyệt vời cho các ứng dụng dựa trên jsp/Tomcat được sử dụng rộng rãi hơn thường được sử dụng cho VXML/CCXML. Nhưng có một vài phiền toái:

  1. Dự án cố gắng để xác nhận trang .cshtml của tôi dưới dạng HTML (dễ hiểu), hoặc bất cứ xác nhận mục tiêu tôi đặt trong Options> Text Editor> HTML> Validation> Target, nhưng nó lực lượng tôi có xác nhận. Tôi dường như không thể tìm cách tắt nó hoàn toàn. Có cách nào để tắt và ngăn hàng trăm cảnh báo không? hoặc vẫn tốt hơn, viết xác nhận tùy chỉnh của riêng tôi cho CCXML/VXML?
  2. Có cách nào để tự động đặt loại nội dung thành "văn bản/vxml" cho tất cả các chế độ xem mà không phải viết Response.ContentType = "text/vxml"; trong mọi Phương thức hành động không?
+0

cho điểm 2 - chỉ cần sử dụng loại bộ điều khiển cơ sở và ghi đè, có lẽ, OnResultExecuting hoặc OnActionExecuting –

+0

@AndrasZoltan: ah vâng, tôi nên tự nghĩ về điều đó ... cảm ơn. – BG100

Trả lời

8

Bạn có thể viết một công cụ xem tùy chỉnh dựa trên các công cụ xem Razor và đăng ký một tùy chỉnh mở rộng cho quan điểm của bạn:

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); 
    } 
} 

và trong Application_Start tuyên bố mở rộng tùy chỉnh:

RazorCodeLanguage.Languages.Add("vxml", new CSharpRazorCodeLanguage()); 
WebPageHttpHandler.RegisterExtension("vxml"); 
ViewEngines.Engines.Clear(); 
ViewEngines.Engines.Add(new VXMLViewEngine()); 

và các nhà cung cấp tùy chỉnh xây dựng trong web.config sẽ reco gnize phần mở rộng .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> 

Bây giờ bạn có thể sử dụng .vxml làm tiện ích cho chế độ xem. Kể từ khi Visual Studio không nhận ra phần mở rộng .vxml, khi bạn mở một tập tin với nó, nó sẽ không làm phiền bạn với cảnh báo. Và bạn thậm chí có thể tạo một plugin VS tùy chỉnh có thể cung cấp cú pháp tô sáng và Intellisense cho phần mở rộng tùy chỉnh này.

+0

Chính xác những gì tôi đã sau .... cảm ơn! – BG100

2

Đối với 2, tôi khuyên bạn nên triển khai ActionResult tùy chỉnh sẽ tự động đặt ContentType. Có rất nhiều ví dụ về stackoverflow và google sẽ cho bạn biết chính xác làm thế nào để đạt được điều này.

Đối với 1 có thể bạn không chỉ cần vô hiệu hóa "Hiển thị lỗi" tùy chọn trong mục "Tùy chọn> Text Editor> HTML> Validation"

Các vấn đề liên quan