2017-04-02 11 views
1

Ich mache einige Programmierung für ein Hotel. Sie möchten eine E-Mail-Bestätigung, wenn eine Buchung vorgenommen wurde.vergleichen mehrere strings in foreach

Ich arbeite mit einem Rasiermesser mergefield genannt: @GuaranteePolicy

Ein Gast 1 oder mehr Zimmer buchen kann. Wenn mehrere Zimmer gebucht werden, muss die Garantie-Richtlinie für jedes Zimmer festgelegt werden. Aber wenn die Garantie-Richtlinie für jedes Zimmer gleich ist, muss ich die Garantie-Richtlinie in der Fußzeile ausdrucken.

So wie ich es sehe, muss ich alle GuaranteePolicy mergenfields in jedem Raum vergleichen und sehen, ob sie aus dem gleichen Text bestehen? Das weiß ich nicht zu lösen.

Ich Schleife durch die mehreren Räume, und drucken, wenn die Garantie-Richtlinie anders ist. Das funktioniert gut:

@if (!string.IsNullOrWhiteSpace(room.GuaranteePolicy)) 
{ 
    <tr> 
     <th> 
      <span><strong>GuaranteePolicy:</strong></span> 
     </th> 
    </tr> 
    <tr> 
     <th> 
      <span>@room.GuaranteePolicy</span> 
     </th> 
    </tr> 
} 

Aber wie kann ich den Text in mehrer room.GuaranteePolicy vergleichen und prüfen, ob der Text in jedem Zimmer das gleiche ist?

@if (room.GuaranteePolicy == ?) 
{ 
    <tr> 
     <th> 
      <span>@room.GuaranteePolicy</span> 
     </th> 
    </tr> 
    <tr> 
     <th> 
      <span>@room.GuaranteePolicy</span> 
     </th> 
    </tr> 
} 

Antwort

0

um herauszufinden, ob alle Zimmer den gleichen GuaranteePolicy Eigenschaftswert haben, sollten Sie vorbereiten Ansichtsmodell mit dieser Information und senden Sie es an die View danach.

Simplified Raumklasse:

public class Room 
{ 
    public string GuaranteePolicy { get; set; } 
} 

Loginc in Ihrem Controller, den Blick zurück, in dem Sie die Anzeige von Informationen:

List<Room> rooms = GetSelectedRooms(); //example 

bool samePolicy = false; 
var firstRoom = rooms.FirstOrDefault(); 
if (firstRoom != null) 
{ 
    samePolicy = rooms.All(r => r.GuaranteePolicy == firstRoom.GuaranteePolicy); 
} 

//Attach samePolicy onto ViewModel or ViewBag so you can use it inside Razor view 
0

In der Steuerung macht eine Funktion, die überprüfen, ob alle Zimmer die gleiche Politik haben und eine Eigenschaft im Modell wahr oder falsch zuweisen:

public class RoomsModel{ 
public bool SamePolicy ... 
public ....... Rooms ... 
} 

dann prüfen, ob diese Eigenschaft true in dem cshtml

if(Model.SamePolicy){ 
<footer>.... 
} 
+0

Vielen Dank für Ihre Antwort. Würden Sie Ihren Vorschlag mit dem Mergelfeld "@ GarantiePolitik" umsetzen? Ich bin ziemlich verwirrt, wo ich das einstellen soll. – NekMak

0

Ich bin keine 100 Prozent sicher, ob ich Ihre Frage richtig verstanden Auf den Punkt gebracht möchten Sie Folgendes überprüfen: Ihr Modell besteht aus mehreren Buchungen, von denen jede GuaranteePolicy haben kann oder nicht. Sie möchten überprüfen, ob sie gesetzt sind, dann sind sie alle gleich, und die Fußzeile wird nur gerendert, wenn das wahr ist. Man könnte es wie folgt lösen:

@{ 
    string firstGuaranteePolicy = Model.Bookings.Select(b => b.GuaranteePolicy).FirstOrDefault(); 
    bool areAllTheSame = Model.Bookings.Select(b => b.GuaranteePolicy).All(val => val == firstGuaranteePolicy); 
} 

@if (areAllTheSame) 
{ 
    <tfoot> 
    ... 
    </tfoot> 
} 

So einfach extrahieren Sie den ersten GuaranteePolicy Wert (ich nehme an Sie Bookings, um sie durch eine Eigenschaft navigieren können, modifizieren, dass nach Ihrer Modellstruktur), und wenn alle von ihnen sind die gleichen wie die erste, dann sind sie alle identisch.