2008-10-13 6 views
7

Mit ASP.NET Ansicht Motor/template aspx/Ashx Seiten den Weg zum Bildschirm zu spucken scheint zu sein:Microsoft MVC „echo/print/Ausgang“ usw.

<%= Person.Name %> 

die mit Webformulare als eine Menge war in Ordnung Modelldaten waren programmgesteuert an Kontrollen gebunden. Aber mit MVC verwenden wir jetzt diese Syntax mehr otern.

Das Problem, das ich damit habe, ist ziemlich trivial, aber auf jede Weise nervig. Dies ist, dass es die Markierung nach oben d.h .:

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

, die sich wie eine Menge Öffnen und Schließen Tags mir scheint zu zerbrechen scheint!

Andere Ansicht Motoren in der MVC contrib haben ein Mittel zur Spucken mit heraus Öffnen und Schließen des Script-Tags mit Standard-Schlüsselwort wie zu screenen „print, aus, Echo“, das heißt (brail Beispiel):

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

Nun, ich sagte, das mag trivial erscheinen, aber es scheint einfach lesbarer zu sein. Was sind also die Vorteile von MS mit dieser Syntax und ohne eine Ausgabemethode?

Prost, Chris.

Antwort

11

Betrachten wir so etwas statt:

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

Ich glaube, dass wird funktionieren. (Obwohl ich habe es nicht getestet, ich habe gerade erst mit MVC begonnen und haben nicht das Toolset hier im Büro.)

EDIT: Ich vermisste offenbar die eigentliche Frage ... :)

Microsoft stellt eine Ausgabemethode zur Verfügung, stellte jedoch keine Syntax wie die von Ihnen beschriebene zur Verfügung. Die Ausgabemethode lautet Response.Write(). Ich kann das nicht direkt beantworten (ich glaube, dass Sie mit Scott Hanselmann bei MS nachsehen müssen :)), aber ich denke, sie wollten das Scripting nicht komplizieren, indem Sie noch eine andere Sprache hinzufügen, um es zu lernen; Ich denke, sie wollten die Sprachen (C#, VB, etc.), die die Entwickler bereits kannten, nutzen.

EDIT # 2: Ich habe folgendes in einen Kommentar eingefügt, und im Nachhinein (zur Vollständigkeit) sollte es Teil der Antwort sein.

Wenn Sie den Learn MVC site on ASP.NET über Kopf, in der Ansicht Tutorial (das ist der Link), werden Sie den folgenden Abschnitt sehen:

Da Sie Response.Write() so oft nennen, Microsoft bietet Ihnen eine Abkürzung für den Aufruf der Methode. Die Ansicht in Listing 3 verwendet die Trennzeichen <%= und %> als Abkürzung für den Aufruf .

Im Wesentlichen ist <%= %> die akzeptierte Abkürzung für Response.Write, und Sie können daher die volle Response.Write Methode überall dort verwenden Sie <%= %> verwenden würden.

+0

Das funktioniert perfekt. –

+1

Sie benötigen am Ende der Response.Write-Anweisung einen Semikolon. –

+0

Mein schlechtes! Ich werde es erneut aktualisieren. :) –

0

Was Sie suchen, ist wahrscheinlich eine andere View-Engine - sie behandeln jeden eingebetteten Code auf ihre eigene Art und Weise.Check out NHaml, ein ASP.Net-Port von Rails 'Haml Motor.

Einige weitere Ansicht Motoren betrachten: Brail, NVelocity

0

Danke Jungs, ich möchte nicht speziell Ansicht Motoren wechseln, wenn ich Zeit am anderen avaliable zu suchen brauchen. Ich bin sicher, dass Sie verstehen können, dass die meisten MS-Entwicklungsfirmen nichts anderes als MS-Marken-Technologie berühren, also wollte ich nur wissen, ob es eine Möglichkeit gibt, dies mit der Standard-Ansichts-Engine zu tun. Oder wenn nicht, warum nicht? Gibt es einen Grund, wenn nicht, wo könnte ich vorschlagen, dass der Standardansichts-Compiler eine solche Schlüsselarbeit hinzufügt.

John- Ich glaube, dass Response.Write (Person.Name) wird nur die Zeichenfolge an den Anfang der Seite, vor jeder anderen Ausgabe. Nicht 100%, aber krank, gib es eine Bash.

Edit:

Offenbar Response.Write (Person.Name) arbeitet als vorgeschlagen. Nun, das war einfach. Danke :-) John.

+0

Überprüfen Sie http://www.asp.net/learn/mvc/tutorial-04-cs.aspx. <%= %> ist eine Verknüpfung für Response.Write. –

0

Ich habe gehört, dass sie daran arbeiten, dies für ASP.Net 4 über Client-Vorlagen zu verbessern.

0

Eine andere Option außer Response.Write wäre XHtml zu schreiben mit XSL transformations

+0

Stimmt, aber warum ist es komplexer als es sein muss? –

+1

Ich habe nicht gesagt, dass es eine gute Option war :) Mit einer anderen View-Engine wäre viel besser als XSLT. Aber wer weiß; vielleicht gibt es da draußen eine Situation, für die XSLT ideal geeignet ist. Es könnte passieren. –

1

ist meine Antwort auf persönliche XP mit MVC4 cshtml - Sie verwenden können: @Html.Raw("SomeStringDirectlyInsideTheBrowserPageHTMLCode")

Dies macht die (dynamisch) string an seiner Position im Gegensatz Response.Write(MyString) die soweit ich bemerkt habe immer die Zeichenfolge am Anfang der Browser-Seite rendert.

Beachten Sie, dass die von @Html.Raw(MyString) gerenderten HTML-Tags nicht vom Compiler überprüft werden können. Ich meine: @ Html.Raw ("< div .... >") kann nicht durch bloße </div > geschlossen werden, weil Sie einen Fehler erhalten werden (< div .... > wird nicht vom Compiler erkannt), so dass Sie muss das Tag mit @ Html.Raw schließen ("</div >")

PS
In einigen Fällen funktioniert das nicht (z. B. schlägt es in DevExpress fehl) - verwenden Sie stattdessen ViewContext.Writer.Write() oder ViewContext.Writer.WriteLine().

+0

Ich denke, das ist die richtige Methode für Razor-Engine. – beawolf

Verwandte Themen