ASP.NET MVC: Wie wenden andere Leute bedingte CSS-Klassen an?

8

Angenommen, ich habe zwei CSS-Stile namens january und tuesday . Ich möchte sie auf einige Textfelder in meiner Ansicht anwenden, je nachdem, ob es Januar oder Dienstag ist oder nicht.

Option A: Führen Sie die Logik im Controller aus, und fügen Sie die Stile in ViewData ein.

In der Steuerung:

%Vor%

Und in der Ansicht:

%Vor%

Option B: Machen Sie die Logik im Controller und weisen Sie die Stile in der Ansicht zu?

In der Steuerung:

%Vor%

Und in der Ansicht:

%Vor%

Kein Weg scheint mir richtig. Die erste Option hat den Controller in Bezug auf die Anzeige, und auch die Stile werden gesperrt, so dass jemand, der an der Ansicht arbeitet, sie nicht ändern kann und, sagen wir, eine dritte Klasse hinzufügen kann. Aber die zweite Option scheint ziemlich logisch zu sein, um nur die "dumme" Ansicht zu sein.

Wie machen das normalerweise andere Leute?

    
Sean 13.09.2011, 18:11
quelle

4 Antworten

10

Option C: Führen Sie die Logik im Controller aus und weisen Sie die Stile in der Ansicht auf einfachere Weise zu:

In der Steuerung:

%Vor%

In der Ansicht:

%Vor%

Andernfalls wird Ihr Controller mit Blickproblemen verschmutzt. Eine leere Klasse ist meistens harmlos, es sei denn du googlest und jedes Byte zählt.

    
Todd Smith 13.09.2011, 19:00
quelle
2

Option A - definitiv.

Die gesamte Logik sollte in der Steuerung platziert werden. Es liegt in der Verantwortung des Controllers, alle erforderlichen Daten über das Modell an die Ansicht zu übermitteln.

Anstelle von mehreren if -Anweisungen (was ein bisschen riecht) verwenden Sie switch oder erstellen Sie statische Wörterbücher von <Month, string> und <Day, string> , um die Zuordnungen zu speichern.

    
Jakub Konecki 13.09.2011 18:14
quelle
2

Haben Sie darüber nachgedacht, jQuery zum Anhängen der CSS-Klassen zu verwenden? Der Controller sollte keine Kenntnis von den css-Klassennamen haben, da er das Konstruktionsprinzip der Trennung von Bedenken durchbricht.

Was Sie versuchen, ist, Ihren Stil auf der Basis eines Datums zu variieren, das mit jQuery leicht zu erreichen ist, solange Sie an dem Datum im Client-Browser interessiert sind und nicht auf dem Server, auf dem Sie Ihre Website hosten ...

z.B. Geben Sie in den Haupt-JS-Dateien Ihrer Website Folgendes ein:

%Vor%

Dann verwenden Sie in Ihrer Ansicht

%Vor%

Wenn Sie es wirklich brauchen, um basierend auf dem Datum auf dem Server zu variieren, dann müssen Sie die Werte, die Sie in Ihrem ViewBag gespeichert haben, über ein JSON-Objekt an das Javascript übergeben.

>     
magritte 13.09.2011 19:13
quelle
1

Ich weiß, das ist jetzt wirklich alt - aber ich hatte die gleiche Art von Problem, und fand alle diese Optionen ziemlich hässlich - vor allem wenn man bedenkt, dass wenn die erste Bedingung falsch und die zweite wahr ist mit etwas wie verlassen werden;

%Vor%

(notieren Sie sich das Leerzeichen vor dem Klassennamen)

Ich habe einen HtmlHelper erstellt, um mein Problem zu lösen:

%Vor%

Und für Consistency (wenn eine einzelne bedingte Klasse erforderlich ist):

%Vor%

Diese können dann wie folgt verwendet werden;

%Vor%     
Luke 19.04.2017 05:07
quelle