2010-12-23 5 views
0

Ich habe eine Ansicht, die eine Liste von Kommentaren anzeigt. Jetzt kann ein Kommentar mit einem Dokument verknüpft sein, so dass ich jeden Kommentar anzeigen muss, den ich überprüfen muss, ob "AttachedDocumentID" einen Wert hat oder nicht, und wenn ja, zeige einen HTML.ActionLink an.if-Anweisung zum Anzeigen eines html.actionlink in einer Ansicht

Nicht sicher auf dem besten Weg, dies zu tun, um eine if-Anweisung in der Ansicht zu vermeiden (die ich zu glauben glaube, ist schlechte Form), und ich wollte nicht wirklich HTML-Code im Helfer generiert haben .

Welche anderen Optionen habe ich?

Antwort

1

Persönlich würde ich es als eine if-Anweisung in der Ansicht tun, wie es klar ist, was Sie wollen, aber Sie könnten eine Erweiterungsmethode hinzufügen, wenn man wollte:

public static MvcHtmlString AttachedDocumentLink(this HtmlHelper helper, string text, string action, string controller, int? attachedDocumentId) 
{ 
    return attachedDocumentId == null ? MvcHtmlString.Empty : helper.ActionLink(text, action, controller, new { id = attachedDocumentId }, null); 
} 

es dann in der Ansicht aufrufen wie normal

<%= Html.AttachedDocumentLink("Document", "AttachedDocument", "Posts", comment.AttachedDocumentId) %> 
+0

Das ist ziemlich genau das, was ich dachte, ich habe mir selbst einen Helfer geschaffen, wo ich einen Ausdruck übergeben kann, der, wenn er als wahr ausgewertet wird, die übergebene Aktion ausführt und ansonsten eine leere Zeichenfolge zurückgibt. – Gazeth

0

dave ist richtig - es gibt nichts falsch mit wenn Aussagen in einer Ansicht. Schleifen sind auch in Ordnung. Die Dinge, die zu vermeiden sind, haben die Aussicht, irgendeine Art von Abfragen oder Berechnungen oder Modelländerungen durchzuführen.

0

Wenn Sie ein separates Modell für View (ViewModel) haben, verschieben Sie diese Art von Logik dort. So wie die Logik zur Ansicht gehört, bleibt sie an einem Ort. Ich bevorzuge HtmlHelpers nur für generische wiederverwendbare Fälle in verschiedenen Ansichten.

Verwandte Themen