2008-10-13 13 views
7

ekrana tükürmek için bir yol olarak görünmektedir: bir sürü olarak webforms ile iyiydiMicrosoft MVC "yankı/yazdırma/çıkış" vb ASP.NET görüşüne motoru/şablon aspx/ashx sayfalarla

<%= Person.Name %> 

Model verileri programatik olarak kontrol edildi. Ama MVC ile şu anda bu sözdizimini daha fazla kullanıyoruz.

İçinde taşıdığım sorun oldukça önemsiz, ancak her iki şekilde de rahatsız edici. .: yani yukarı işareti kırmaya görünüyor bana açılış ve kapanış etiketleri bir sürü gibi görünüyor

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

olmasıdır! MVC contrib

Diğer görünüm motorları dışarı açılmasıyla ekrana tükürüp gibi standart anahtar kelimeyi kullanarak komut dosyası etiketleri kapanış için bir araç var yani (brail örnek) "baskı, dışarı, echo":

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

Şimdi, bunun önemsiz görünebileceğini söyledim, ancak bu şekilde daha okunaklı görünüyor. Öyleyse, MS'in bu sözdizimine sahip olmasının avantajları nelerdir ve bir çıkış yöntemi sağlamaz mı?

Şerefe, Chris.

cevap

11

yerine, böyle bir şey düşünün:

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

Bunu çalışacağız inanıyoruz. (Test ettim olsak da; ben sadece MVC ile başladık ve ofiste burada araç seti yok.)

DÜZENLEME: görünüşte gerçek soru cevapsız ... :)

Microsoft, bir çıkış yöntemi sağlar, ancak açıkladığınız gibi bir sözdizimi sağlamadı. Çıkış yöntemi Response.Write()'dir. Buna doğrudan cevap veremem (Scott Hanselmann ile MS üzerinde kontrol etmeniz gerektiğine inanıyorum :)), ama öğrenmemiz için henüz başka bir dil ekleyerek betikleri zorlaştırmak istemediklerini düşünüyorum; Geliştiricilerin zaten bildiği dilleri (C#, VB, vb.) Kullanmak istediklerini düşünüyorum.

DÜZENLEME # 2: Aşağıdakileri bir yorum içine yerleştirdim ve geriye doğru (tamlık için), yanıtın bir parçası olmalıdır.

Eğer görünümü öğretici (bağlantı var) 'de, Learn MVC site on ASP.NET sından ise, şu paragrafı görürsünüz: Sık sık bu yüzden Response.Write() diyoruz yana

Microsoft bir sağlar Response.Write() yöntemini çağırmak için kısayol. Liste 3'teki görünüm, Response.Write() numaralı çağıran bir kısayol olarak sınırlayıcıları ve %> kullanır.

Esasen, <%= %>Response.Write kabul kısayol olduğunu ve bu nedenle her yerde <%= %> kullanacağınız tam Response.Write yöntemi kullanabilirsiniz.

+0

Mükemmel çalışıyor. –

+1

Bununla birlikte, Response.Write Bildirimi'nin sonunda bir noktalı virgül kullanmanız gerekir. –

+0

Benim hatam! Tekrar güncelleyeceğim. :) –

0

Aradığınız şey muhtemelen farklı bir View motorudur - her biri gömülü kodu kendi yöntemleriyle ele alır.Rails 'Haml motorunun bir ASP.Net bağlantı noktası olan NHaml'a bakın. Diğer DAİREMİZ bakmak için zaman alacak olsa da, özellikle dont görüntülemek motorları arasında geçiş yapmak NVelocity

0

teşekkürler çocuklar, Brail:

Biraz daha görünüm motorları bakmak için. MS geliştirme evlerinin çoğunun MS markalı bir teknolojiye dokunmadığını anlayabileceğine eminim, bu yüzden bunu varsayılan görüntüleme motoruyla yapmanın bir yolu olup olmadığını öğrenmek istedim. Ya da değilse, neden olmasın? Bir neden var mı, yoksa varsayılan görünüm derleyicisinin böyle bir anahtar kelime eklemesini önerebilirim.

John - Response.Write (Person.Name) öğesinin, dizeyi sayfanın başına, başka herhangi bir çıktıdan önce oluşturduğuna inanıyorum. Bununla ilgili% 100 değil, hasta bir bash.

Düzenleme: önerildiği gibi

Görünüşe göre, Response.Write (Person.Name) çalışır. Peki bu kolaydı. Teşekkürler :-) John.

+0

http://www.asp.net/learn/mvc/tutorial-04-cs.aspx adresini kontrol edin. <%= %>, Response.Write için bir kısayoldur. –

0

İstemci şablonları aracılığıyla bunu ASP.Net 4 için geliştirmeye çalıştıklarını duydum.

0

Response.Write dışındaki bir diğer seçenek Benim cevabım MVC4 cshtml ile kişisel XP dayanmaktadır XSL transformations

+0

Doğru, ama neden olması gerekenden daha karmaşık hale getiriyor? –

+1

İyi bir seçenek olduğunu söylemedim :) Farklı bir View motorunu kullanmak XSLT'ye çok tercih edilebilirdi. Ama kim bilir; belki de bir yerlerde XSLT'nin ideal olarak uygun olduğu bir durum var. Olabilir. –

1

ile XHTML yazma olacağını - kullanabilirsiniz: @Html.Raw("SomeStringDirectlyInsideTheBrowserPageHTMLCode")

Bu (dinamik) dizesini vermektedir Fark ettiğim kadarıyla her zaman tarayıcı sayfasının başlangıcında dizeyi oluşturduğu Response.Write(MyString)'un aksine.

@Html.Raw(MyString) tarafından oluşturulan HTML etiketlerinin derleyici tarafından denetlenemeyeceğini unutmayın. Yani: @ Html.Raw ("< div .... >") </div > tarafından kapatılamaz çünkü bir hata alırsınız (< div ... derleyici tarafından algılanmadı >) @ Html.Raw ("</div >") ile etiketi kapatmalıdır.

PS
Bazı durumlarda bu çalışmaz (örneğin, DevExpress içinde başarısız olur) - bunun yerine ViewContext.Writer.Write() veya ViewContext.Writer.WriteLine() kullanın.

+0

Bence bu Jiletli motor için doğru yöntem. – beawolf