2008-10-13 30 views
7

Với các trang view engine/mẫu aspx/ashx ASP.NET của các cách để nhổ vào màn hình có vẻ là:Microsoft MVC "echo/in/đầu ra" vv

<%= Person.Name %> 

nào là tốt với webforms như rất nhiều dữ liệu mô hình đã bị ràng buộc để điều khiển theo chương trình. Nhưng với MVC, chúng tôi đang sử dụng cú pháp này nhiều hơn bên ngoài.

Vấn đề tôi gặp phải với nó khá tầm thường, nhưng cũng khó chịu. Điều này có vẻ như phá vỡ nhãn hiệu lên tức là:

<% foreach(var Person in People) { %> 
    <%= Person.Name %> 
<% } %> 

Điều đó có vẻ như rất nhiều thẻ mở và đóng cho tôi!

cơ quan điểm khác trong contrib MVC có một phương tiện để nhổ nước bọt vào màn hình với ra mở cửa và đóng cửa các thẻ script sử dụng từ khóa chuẩn như "in, out, echo" tức là (ví dụ Brail):

<% 
for element in list: 
     output "<li>${element}</li>" 
end 
%> 

Bây giờ, tôi nói điều này có vẻ tầm thường, nhưng nó có vẻ dễ đọc hơn theo cách này. Vậy những ưu điểm của MS có cú pháp này là gì và không cung cấp phương thức đầu ra?

Chúc mừng, Chris.

Trả lời

11

Hãy xem xét một cái gì đó như thế này, thay vì:

<% foreach(var Person in People) { 
    Response.Write(Person.Name); 
} %> 

Tôi tin rằng tôi sẽ làm việc. (Mặc dù tôi chưa thử nghiệm nó, tôi chỉ mới bắt đầu với MVC và không có bộ công cụ tại văn phòng.)

EDIT: Tôi dường như đã bỏ lỡ câu hỏi thực tế ... :)

Microsoft cung cấp phương thức đầu ra, nhưng không cung cấp cú pháp như cú pháp bạn mô tả. Phương thức đầu ra là Response.Write(). Tôi không thể trả lời trực tiếp (Tôi tin rằng bạn sẽ cần phải kiểm tra với Scott Hanselmann qua MS :)), nhưng tôi nghĩ rằng họ không muốn phức tạp kịch bản bằng cách thêm một ngôn ngữ khác để chúng ta học; Tôi nghĩ rằng họ muốn tận dụng các ngôn ngữ (C#, VB, v.v.) mà các nhà phát triển đã biết.

EDIT # 2: Tôi đã đặt câu trả lời sau trong phần nhận xét và nhìn lại (để hoàn thành), nó phải là một phần của câu trả lời.

Nếu bạn đi qua các Learn MVC site on ASP.NET, trong giao diện hướng dẫn (đó là liên kết), bạn sẽ thấy những đoạn như sau:

Kể từ khi bạn gọi Response.Write() nên thường, Microsoft cung cấp cho bạn với một phím tắt để gọi phương thức Response.Write(). Chế độ xem trong Liệt kê 3 sử dụng các dấu phân tách <%=%> làm lối tắt để gọi Response.Write().

Về cơ bản, <%= %> là các phím tắt được chấp nhận cho Response.Write, và do đó bạn có thể sử dụng đầy đủ Response.Write phương pháp bất cứ nơi nào bạn muốn sử dụng <%= %>.

+0

Điều đó hoạt động hoàn hảo. –

+1

Mặc dù, bạn sẽ cần dấu chấm phẩy ở cuối Câu lệnh Response.Write. –

+0

Tệ của tôi! Tôi sẽ cập nhật lại. :) –

0

Điều bạn đang tìm kiếm có lẽ là một công cụ Xem khác nhau - mỗi công cụ đều xử lý mã được nhúng theo cách riêng của chúng.Hãy xem NHaml, một cổng ASP.Net của động cơ Haml của Rails.

Một số công cụ xem hơn để xem xét: Brail, NVelocity

0

Thanks guys, Tôi không đặc biệt muốn chuyển sang cơ quan điểm, mặc dù tôi sẽ dành thời gian để nhìn vào sẵn khác. Tôi chắc rằng bạn có thể hiểu rằng hầu hết các nhà phát triển MS không chạm vào bất cứ điều gì nhưng MS mang nhãn hiệu công nghệ vì vậy tôi chỉ muốn biết nếu có một cách để làm điều này với công cụ xem mặc định. Hoặc nếu không, tại sao không? Có một lý do, nếu không phải nơi tôi có thể đề nghị trình biên dịch xem mặc định thêm một keywork như vậy.

John- Tôi tin rằng Response.Write (Person.Name) sẽ chỉ hiển thị chuỗi ở đầu trang, trước bất kỳ đầu ra nào khác. Tuy nhiên, không phải 100% số người bị bệnh.

Chỉnh sửa:

Rõ ràng, Response.Write (Person.Name) hoạt động như được đề xuất. Điều đó thật dễ dàng. Cảm ơn :-) John.

+0

Kiểm tra http://www.asp.net/learn/mvc/tutorial-04-cs.aspx. <%= %> là phím tắt cho Response.Write. –

0

Tôi đã nghe nói họ đang làm việc để cải thiện điều này cho ASP.Net 4 thông qua các mẫu khách hàng.

0

Một tùy chọn khác hơn Response.Write sẽ được để viết XHTML với XSL transformations

+0

Đúng, nhưng tại sao làm cho nó phức tạp hơn cần thiết? –

+1

Tôi không nói đó là một lựa chọn tốt :) Sử dụng một công cụ Xem khác nhau sẽ thích hợp hơn nhiều với XSLT. Nhưng ai biết được; có thể một nơi nào đó ngoài kia có một tình huống mà XSLT là lý tưởng. Nó có thể xảy ra. –

1

câu trả lời của tôi là dựa trên XP cá nhân với MVC4 cshtml - bạn có thể sử dụng: @Html.Raw("SomeStringDirectlyInsideTheBrowserPageHTMLCode")

này ám chỉ rằng (động) chuỗi tại vị trí của nó không giống như Response.Write(MyString) mà theo như tôi đã nhận thấy luôn luôn làm cho chuỗi ở đầu của trang trình duyệt.

Lưu ý rằng các thẻ HTML được hiển thị bởi @Html.Raw(MyString) không thể được trình biên dịch kiểm tra. Ý tôi là: @ Html.Raw ("< div .... >") không thể bị đóng bởi chỉ </div > vì bạn sẽ gặp lỗi (< div .... > không được trình biên dịch phát hiện) phải đóng thẻ bằng @ Html.Raw ("</div >")

PS
Trong một số trường hợp, tính năng này không hoạt động (ví dụ: không thành công trong DevExpress) - hãy sử dụng ViewContext.Writer.Write() hoặc ViewContext.Writer.WriteLine() để thay thế.

+0

Tôi nghĩ đây là phương pháp chính xác cho công cụ Dao cạo. – beawolf

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