2013-06-26 11 views
5

Meine Site verfügt über eine Spalte, in der die Neuigkeiten angezeigt werden. Die DIV-s mit diesen Nachrichten, die das Wort "Preis" enthalten, müssen in der grünen Farbe gemalt werden. (Wenn eine Person einen Datensatz (eine Nachricht) ohne Angabe des Preises erstellt hat (ohne Wort "Preis"), ist das Grün nicht notwendig. Aber wenn eine Person das Feldmodell ausgefüllt hat. Preis (also im Text haben wir ein Wort „Preis“) die div in grüner Farbe bemalt werden müssen.C# enthält Methode

in Hinblick für die Erstellung von Nachrichten gibt es ein Feld model.Prize

<div class="editor-field"> 
    @Html.TextAreaFor(model => model.Prize,4,55,null) 
    @Html.ValidationMessageFor(model => model.Prize) 
</div> 

der Wert model.Prize nimmt die Steuerung, die einen neuen Nachrichten-Eintrag erstellen .

public ActionResult Create(Project project) 
{ 
    if (ModelState.IsValid) 
     {(some code...) 
     News n = new News(); 
     n.Date = DateTime.UtcNow; 
     n.Description = project.Shortdescription+"\r\n\Prize:\r\n"+project.Prize; 

     (some code…) 
     NewsController.Add(db,n); 
     db.SaveChanges(); 
     return RedirectToAction("Main"); 
    } 

In der anderen Methode Block of News Co ntroller Ich zeige die Nachricht:

public PartialViewResult Block() 
{ 
    List<News> news = new List<News>(); 
    Int32 count = 0; 

    foreach (News n in db.News.ToList().OrderByDescending(n => n.Date)) 
    { 
     if (count++ < 13) news.Add(n); 
    } 
    return PartialView(news); 

Für jeden Eintrag im View-Block erzeugt <div class ="newsWrapper">, in dem die Nachrichten Rekordeinsatz.

@foreach (var item in Model){ 
    <div class ="newsWrapper"> 
    <p class="newsDate">@item.Date.AddHours(4).ToString("dd.MM.yyyy HH:mm")</p> 
    <a href="@item.Link"> @item.Title </a> 
    <p>@Html.Raw(Html.Encode(item.Description).Replace("\n", "<br />"))</p> 
</div> 
} 

Ich habe versucht, das Problem Ich habe die neue div in der Blockansicht zu lösen:

dieses div
@foreach (var item in Model) 
{ 
<div class ="newsWrapper"> 
     <div class="@(ViewBag.IsPrize == true ? "GreenNewsClass" : "")"> 
      <p class="newsDate">@item.Date.AddHours(4).ToString("dd.MM.yyyy HH:mm")</p> 
       <a href="@item.Link"> @item.Title </a> 
      <p>@Html.Raw(Html.Encode(item.Description).Replace("\n", "<br />"))</p> 
     </div> 
</div> 
} 

Die GreenNewsClass wird malen in der grünen Farbe.

Aber wie kann ich bekommen, wenn n.Description das Wort Prise, und ViewBag.IsPrize == false enthält, wenn es nicht ist?

Ich versuchte, das Verfahren blockieren zu ändern:

public PartialViewResult Block() 
{ 
    List<News> news = new List<News>(); 
    Int32 count = 0; 

    foreach (News n in db.News.ToList().OrderByDescending(n => n.Date)) 
    { 
     if (count++ < 13) news.Add(n); 
     if (n.Description.Contains("Призы")) 
     { 
      ViewBag.IsPrize = true; 
     } 
     else { ViewBag.IsPrize = false; } 
    } 
    return PartialView(news); 

aber es zeichnet alle Nachrichten in grüner Farbe, nicht nur diejenigen, die das Wort Preis enthalten.

Antwort

2

Es klingt wie Sie dies tun wollen:

@foreach (var item in Model) 
{ 
    <div class ="newsWrapper"> 
    <div class="@(item.Description.Contains("Призы") ? "GreenNewsClass" : "")"> 
     <p class="newsDate">@item.Date.AddHours(4).ToString("dd.MM.yyyy HH:mm")</p> 
     <a href="@item.Link"> @item.Title </a> 
     <p>@Html.Raw(Html.Encode(item.Description).Replace("\n", "<br />"))</p> 
    </div> 
    </div> 
} 
+0

Ja, es funktioniert !!! Vielen Dank!!!!! – Dan

+0

@Dylan sollten Sie dies als die richtige Antwort dann markieren, damit zukünftige Leser es verwenden können. –

1

Erster Versuch eine Eigenschaft zu Ihrem Modell hinzufügen, anstatt zu Ihrem ViewBag, scheint es, wie Sie nur einen einzigen Wert in Ihrem ViewBag haben.

Entfernen Sie die true Zustand, weil es überflüssig ist, bewegen sich die Klassendefinition innerhalb der Bedingung, dass die Art und Weise der div leer sein wird, wenn die Bedingung falsch ist und versuchen Sie Folgendes:

@foreach (var item in Model) 
{ 
    <div class ="newsWrapper"> 
     <div @(item.IsPrize? "class=GreenNewsClass" : "")> 
      <p class="newsDate">@item.Date.AddHours(4).ToString("dd.MM.yyyy HH:mm")</p> 
      <a href="@item.Link"> @item.Title </a> 
      <p>@Html.Raw(Html.Encode(item.Description).Replace("\n", "<br />"))</p> 
     </div> 
    </div> 
} 

Ich habe den Code nicht überprüft aber probier es aus.