2013-06-26 11 views
5

Moja witryna zawiera kolumnę, która wyświetla wiadomości. DIV-y z tymi wiadomościami, które zawierają słowo "nagroda", muszą być pomalowane na zielony kolor. (Jeśli dana osoba utworzyła rekord (wiadomość) bez określania nagrody (bez słowa "Nagroda"), kolor zielony nie jest konieczny, ale jeśli osoba wypełniła model pola.Prize (tak w tekście mamy słowo „Nagroda”) div muszą być pomalowane w kolorze zielonym.C# Zawiera metodę

w widoku tworzenia wiadomości znajduje się pole model.Prize

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

wartość model.Prize trwa kontroler, który tworzy nowy rekord informacyjny

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

Inna metoda Blok wiadomości Co ntroller wyświetlać Wiadomości:

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

Dla każdego wpisu w widoku bloku tworzy <div class ="newsWrapper"> w którym wkładka rekord aktualności.

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

starałem się rozwiązać problem Dodałem nowy div w bloku Widok:

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

GreenNewsClass namaluje DIV w kolorze zielonym.

Ale jak mogę uzyskać ViewBag.IsPrize == true, jeśli n.Description zawiera słowo Nagroda, i ViewBag.IsPrize == false, jeśli nie jest?

Próbowałem zmienić blok metoda:

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

ale maluje wszystkie nowości w kolorze zielonym, a nie tylko te, które zawierają słowo nagrodę.

Odpowiedz

2

Brzmi to jak chcesz to zrobić:

@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

Tak, działa !!! Dziękuję Ci bardzo!!!!! – Dan

+0

@Dylan należy oznaczyć jako poprawną odpowiedź, aby przyszli czytelnicy mogli z niego korzystać. –

1

najpierw spróbować dodać obiekt do modelu zamiast do ViewBag, wydaje się, że masz tylko jedną wartość w swoim ViewBag.

Usuń warunek true bo to zbędne, przesuń definicję klasy wewnątrz pod warunkiem, że sposób, w jaki div będzie pusta, gdy warunek jest fałszywy i spróbuj wykonać następujące czynności:

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

Nie zweryfikowana kod ale spróbuj tego.

Powiązane problemy