Có thể sử dụng Razor View Engine bên ngoài asp.net không


102

Nếu tôi nhìn vào Razor View Engine, thì tôi thấy một cú pháp rất hay và ngắn gọn, không liên quan đặc biệt đến việc tạo html. Vì vậy, tôi tự hỏi, sẽ dễ dàng như thế nào khi sử dụng công cụ bên ngoài asp.net trong môi trường .net "bình thường", chẳng hạn như để tạo văn bản, mã, ...

Mọi con trỏ, ví dụ, bình luận hoặc giải thích đều được hoan nghênh.

Câu trả lời:


80

Có hai vấn đề ở đây:

  1. Có, bạn có thể chạy Razor View Engine bên ngoài ngữ cảnh của miền ứng dụng ASP.NET, như được giải thích trong blog của Andrew: http://vibrantcode.com/blog/2010/11/16/hosting-razor-outside-of -aspnet-repair-for-mvc3-rc.html
  2. Tuy nhiên, Razor vẫn chủ yếu tập trung vào việc tạo ra đánh dấu giống xml (ví dụ: HTML) theo nghĩa là trình phân tích cú pháp Razor sử dụng sự hiện diện của <tags>để xác định sự chuyển đổi giữa mã và đánh dấu. Bạn có thể sử dụng nó để tạo bất kỳ văn bản nào nhưng bạn có thể gặp sự cố khi đầu ra của bạn không khớp với giả định của Razor về ý định của bạn.

Vì vậy, ví dụ trong khi đây là mã Razor hợp lệ (vì <div>thẻ):

@if(printHello) {
   <div>Hello!</div>
}

Đoạn mã sau không hợp lệ (vì Hello! Vẫn đang được coi là mã):

@if(printHello) {
   Hello!
}

Tuy nhiên, có một <text>thẻ đặc biệt có thể được sử dụng để buộc chuyển đổi cho các khối nhiều dòng ( <text>thẻ sẽ không được hiển thị):

@if(printHello) {
   <text>Hello!
   Another line</text>
}

Ngoài ra còn có một cú pháp ngắn hơn để buộc một dòng chuyển tiếp bằng cách sử dụng @::

@if(printHello) {
   @:Hello!
}

2
Tôi đã nghĩ đến việc sử dụng nó để tạo ra những thứ như e-mail hoặc tạo mã IronPython nhanh chóng. Vì chúng không sử dụng thẻ, có lẽ tốt hơn nên xem xét các lựa chọn thay thế khác. Cảm ơn vì câu trả lời.
Thomas

6
@Thomas Razor sẽ hoạt động tốt trong những tình huống đó, bạn chỉ cần thêm những <text>thẻ ma thuật đó hoặc thỉnh thoảng sử dụng @:. Một khi hỗ trợ trình soạn thảo VS ra mắt cho cú pháp Razor, sẽ khá dễ dàng để biết khi nào quá trình chuyển đổi xảy ra.
marcind

34

Kiểm tra RazorEngine , đó là một khuôn khổ nhỏ được xây dựng trên Razor cho phép bạn làm điều này.


Đã xảy ra sự cố khi cài đặt dự án này trên ứng dụng nhắm mục tiêu .net 4, yêu cầu cập nhật.
Johnny_ Ngày

22

Hãy xem thư viện RazorTemplates . Nó nhẹ hơn thư viện RazorEngine, nó an toàn theo luồng và có giao diện tối giản rất đẹp.

Biên dịch và hiển thị một mẫu đơn giản như hai dòng mã:

var template = Template.Compile("Hello @Model.Name!");
Console.WriteLine(template.Render(new { Name = "World" }));

1
Bạn có đang làm nổi bật sự an toàn luồng của RazorTemplates b / c hay không một trong những giải pháp gợi ý khác cho câu hỏi này không? Tôi đặc biệt quan tâm đến RazorEngine.
Steve Scheffler

9

Cả RazorEngineRazorTemplates đều đã được đề cập ở đây, nhưng hãy xem RazorMachine . Bạn có thể chỉ cần trỏ ứng dụng không phải MVC của mình đến thư mục ~ / Views của (một) ứng dụng MVC hiện có, thực thi với việc gửi mô hình phù hợp và nhận kết xuất đầu ra trên 2 dòng mã:

var sb = new StringBuilder();

//RazorMachine magic:
//*tweets* is basically List<TwitterPost> - simple collection of custom POCO
//first param for rm.ExecuteUrl points to ~/Views folder, MVC style
var rm = new RazorMachine(htmlEncode: false);
ITemplate template = rm.ExecuteUrl("~/twitter/twitter", tweets);

//do whatever you want with result
sb.Append(template);

3

Tạo mã hoặc văn bản: bạn có nghĩa là như Mẫu T4: http://msdn.microsoft.com/en-us/library/bb126445.aspx hoặc các công cụ thợ mã?


Đây nhu cầu upvotes vì T4 có điểm tương đồng với Razor và là một bộ tạo mã tất cả các mục đích thực tế rằng tàu ra khỏi hộp như một tính năng trong Visual Studio - về cơ bản nó là một tất cả các mục đích 'Razor'
Dan Ling

Tôi hiểu rằng các mẫu T4 chỉ có thể được thay đổi tại thời điểm biên dịch, tệp .tt được chuyển đổi thành và lưu dưới dạng tệp .cs. Trong cách sử dụng của tôi, một người dùng bán kỹ thuật muốn cập nhật mẫu mà không cần phải xây dựng lại ứng dụng. Có cách nào dễ dàng đạt được điều này bằng cách sử dụng các mẫu T4 không?
daveb

Có thể, miễn là bất cứ thứ gì nó đang tạo ra có thể được diễn giải, như CSHTML có thể được sử dụng bởi công cụ Razor trong thời gian chạy. Bạn cũng có thể programmably kích hoạt nó để tạo ra mã, nhưng mã biên dịch đã được phân tích bởi trình biên dịch được sử dụng được ....
Brian Mains
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.