2008-10-13 10 views
7

Con le pagine vista del motore/template aspx/ASHX di ASP.NET il modo di sputare a schermo sembra essere:Microsoft MVC "eco/print/uscita", ecc

<%= Person.Name %> 

che andava bene con WebForms come un sacco di i dati del modello erano vincolati ai controlli in modo programmatico. Ma con MVC stiamo usando questa sintassi più oftern.

Il problema che ho con esso è piuttosto banale, ma fastidioso in entrambi i casi. Ciò è che sembra di rompere il mark up cioè .:

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

che sembra un sacco di apertura e chiusura tag per me!

Altri motori di vista del contrib MVC hanno un mezzo di sputare sullo schermo senza uscire aprire e chiudere i tag script utilizzando parola standard come "stampa, fuori, echo" cioè (esempio Brail):

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

Ora, ho detto che questo può sembrare banale, ma sembra solo più leggibile in questo modo. Quindi quali sono i vantaggi di MS con questa sintassi e non fornendo un metodo di output?

Cheers, Chris.

risposta

11

prendere in considerazione qualcosa di simile, invece:

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

Credo che sarà il lavoro. (Anche se non ho provato, ho appena cominciato con MVC e non hanno il set di strumenti qui in ufficio.)

EDIT: mi pare perso la domanda reale ... :)

Microsoft fornisce un metodo di output, ma non fornisce una sintassi come quella che si descrive. Il metodo di output è Response.Write(). Non posso rispondere direttamente a questo (credo che dovrai controllare con Scott Hanselmann alla MS :)), ma penso che non volessero complicare lo scripting aggiungendo un altro linguaggio per noi da imparare; Penso che volessero sfruttare le lingue (C#, VB, ecc.) Che gli sviluppatori già conoscevano.

EDIT # 2: Ho inserito quanto segue in un commento, e in retrospettiva (per completezza), dovrebbe essere parte della risposta.

Se, nel tutorial vista (che è il link) vi dirigete verso il Learn MVC site on ASP.NET, vedrete il seguente paragrafo:

Dal momento che si chiama Response.Write() così spesso, Microsoft si dà un collegamento per chiamare il metodo Response.Write(). La vista in Il listato 3 utilizza i delimitatori <%= e %> come collegamento per chiamare Response.Write().

In sostanza, <%= %> è la scorciatoia accettato per Response.Write, e si può quindi utilizzare il metodo integrale Response.Write ovunque usereste <%= %>.

+0

Che funziona perfettamente. –

+1

Sebbene sia necessario un punto e virgola al termine dell'istruzione Response.Write. –

+0

Il mio male! Aggiornerò di nuovo :) –

0

Quello che stai cercando è probabilmente un diverso motore di visualizzazione: ognuno di essi gestisce il codice incorporato come se fosse a modo suo.Controlla NHaml, una porta ASP.Net del motore Haml di Rails.

Alcuni altri motori di vista a guardare: Brail, NVelocity

0

Grazie ragazzi, io non specificamente voglio cambiare motori di vista, anche se mi prenderò il tempo di guardare l'altro available. Sono sicuro che puoi capire che la maggior parte delle case di sviluppo MS non tocchino altro che la tecnologia con marchio MS, quindi volevo solo sapere se c'era un modo per farlo con il motore di visualizzazione predefinito. O se no, perché no? C'è una ragione, se non dove potrei suggerire che il compilatore di viste predefinito aggiunga un tale keywork.

John- Credo che Response.Write (Person.Name) eseguirà il rendering della stringa nella parte superiore della pagina, prima di qualsiasi altro output. Non al 100% su questo, maledizione.

Edit:

A quanto pare, Response.Write (Person.Name) lavora come suggerito. Bene, è stato facile. Grazie :-) Giovanni.

+0

Controllare http://www.asp.net/learn/mvc/tutorial-04-cs.aspx. <%= %> è una scorciatoia per Response.Write. –

0

Ho sentito che stanno lavorando per migliorare questo per ASP.Net 4 tramite i modelli client.

0

Un'altra opzione diversa da Response.Write sarebbe quella di scrivere XHTML con XSL transformations

+0

Vero, ma perché renderlo più complesso di quanto deve essere? –

+1

Non ho detto che era una buona opzione :) Utilizzare un diverso motore di visualizzazione sarebbe molto preferibile a XSLT. Ma chi lo sa; forse da qualche parte là fuori c'è una situazione in cui XSLT è idealmente adatto. Potrebbe succedere. –

1

La mia risposta si basa su XP personale con MVC4 cshtml - è possibile utilizzare: @Html.Raw("SomeStringDirectlyInsideTheBrowserPageHTMLCode")

Questo rende la corda (dinamica) nella sua posizione a differenza di Response.Write(MyString) che, per quanto ho notato, rende sempre la stringa all'inizio della pagina del browser.

Si noti che i tag HTML resi da @Html.Raw(MyString) non possono essere controllati dal compilatore. Voglio dire: @ Html.Raw ("< div .... >") non può essere chiuso da mero </div > perché si otterrà un errore (< div .... > non viene rilevato dal compilatore) così tu deve chiudere il tag con @ Html.Raw ("</div >")

PS
In alcuni casi questo non funziona (ad esempio non riesce in DevExpress) - utilizzare ViewContext.Writer.Write() o ViewContext.Writer.WriteLine().

+0

Penso che questo sia il metodo corretto per il motore Razor. – beawolf