2009-07-22 5 views
2

Ich habe ein triviales Problem .. und kann es nicht lösen.C# ASP.NET MVC: Single-Line-If-Klausel in Sicht?

Ich habe dies aus meiner Sicht:

<% if (!Model.DisplayText) { %> <%= Model.MyText %> <% } %> 

Wie Sie sehen, ich bin mit 3x <% und%>. Das schreit einfach wie schlechter Code. Aber ich kann nicht scheinen, dass das in einer einzigen Zeile funktioniert. Dies wirft alle Arten von seltsamen Fehler (wie zB Semikolon fehlt, und wenn ich ein Add wirft es etwas anderes):

<% if (!Model.DisplayText) { Model.MyText } %> 

Jede Idee ?!

+0

einer von ihnen schreibt tatsächlich Inhalte zu sehen ... das ist dein Problem. –

+2

Nur eine Anmerkung, der Grund, warum Sie in kein Semikolon-Problem geraten, ist anders als "<%" für Inline-Code ist das "<% =" für die Ausgabe und wahrscheinlich wird in eine Methode Aufruf (etwas wie Seite .write (Model.MyText);) wenn die Seite geparst wird. – statenjason

+0

Ihr ursprünglicher Code war in Ordnung. Es ist nichts an sich falsch mit 3x <% %> 's. Nur Ziel für Klarheit – mmcdole

Antwort

11

Versuchen:

<%= Model.DisplayText ? "" : Model.MyText %> 

oder

<% if(!Model.DisplayText) Response.Write(Model.MyText); %> 
+0

Geschlagen zum Schlag, nette Post. – Odd

+0

Die ternäre Operator Lösung war genau das, was ich brauchte. Vielen Dank! P.S. In diesem Fall gibt es kein Semikolon, deshalb möchten Sie vielleicht das für andere entfernen, die diese Lösung nachschlagen. Danke noch einmal! – Alex

+0

@Alex - behoben. – tvanfosson

1

Dieser:

<%= foo %> 

ist im Allgemeinen äquivalent zu:

<% Response.Write(foo) %> 

So können Sie schreiben:

<% if (!Model.DisplayText) { Response.Write(Model.MyText); } %> 

aber ich sehe nicht, was Sie wirklich von diesem erhalten. Ihr ursprünglicher Code ist in Ordnung, wie es ist. Oder Sie verwenden den ternären Operator, wie OrbMan vorschlägt.

+0

Sie verpassen nach dem Aufruf von Response.Write ein Semikolon, und dies ist wahrscheinlich der Fall, bei dem die Klammern am besten weggelassen werden. – kastermester

1
ist im Grunde wie schreiben Response.Write (Ihre Daten) bedeutet, dass der Code ausgeführt wird, aber es wird nicht speziell etwas ausschreiben. Sie könnten ein Response.Write in Ihrem if-Block verwenden, um die gewünschten Daten auszugeben.

Oder gehen Sie mit OrbMan's Antwort, er hat mich dazu geschlagen.

+0

Alle Antworten waren großartig :) Danke! – Alex