2013-06-26 16 views
5

Il mio sito ha una colonna che mostra le notizie. Il DIV-s con queste notizie che contengono la parola "premio" deve essere dipinto nel colore verde. (Se una persona ha creato un record (una notizia) senza specificare il Premio (senza la parola "Premio"), il verde non è necessario, ma se una persona ha compilato il modello del campo. Prezzo (quindi nel testo abbiamo una parola "Premio") il div deve essere verniciato in colore verde.C# Contiene il metodo

in una visione per la creazione di notizie c'è un campo model.Prize

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

il valore della model.Prize prende il controller che creano un nuovo record notizie

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"); 
    } 

Nell'altro metodo Blocco di Notizie Co ntroller visualizzo la notizia:

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); 

Per ogni voce nella vista Blocco crea <div class ="newsWrapper"> in cui la notizia di inserimento record.

@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> 
} 

ho cercato di risolvere il problema ho aggiunto il nuovo div nel blocco vista:

@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> 
} 

Il GreenNewsClass dipingeranno questo div in colore verde.

Ma come posso ottenere ViewBag.IsPrize == true se n.Description contiene la parola Premio, e ViewBag.IsPrize == false se non è?

ho cercato di cambiare il metodo di blocco:

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); 

ma dipinge tutte le notizie di colore verde, non solo quelli che contengono la parola Premio.

risposta

2

Sembra che si vuole fare questo:

@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

Sì, funziona !!! Grazie mille!!!!! – Dan

+0

@Dylan dovresti contrassegnarlo come la risposta corretta, in modo che i futuri lettori possano usarlo. –

1

prima cercare di aggiungere un alloggio al modello invece al ViewBag, sembra che hai solo un singolo valore nella vostra ViewBag.

Eliminare la condizione true perché è ridondante, spostare la definizione della classe all'interno della condizione in questo modo il div sarà vuoto quando la condizione è falsa e provare il seguente:

@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> 
} 

non ho verificato il codice ma provalo.