2013-06-26 27 views
5

Sitemde, haberi gösteren bir sütun var. "Ödül" kelimesini içeren bu haberler ile DIV-ler yeşil renkte boyanmalıdır. (Bir kişi Ödül'ü ("Ödül" kelimesi olmadan) belirtmeden bir rekor (bir haber) oluşturduysa, yeşil gerekli değildir. Fakat bir kişi alan modelini doldurduysa.Prize (metinde bir kelimemiz var) "Ödül") div yeşil renkte boyanmış olmalıdır.C# İçindekiler Yöntem

bir görünümde haberleri oluşturmak için bir sahadan model.Prize

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

yoktur model.Prize değeri yeni haber kaydı oluşturun Kontrolörü alır

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

Başka bir yöntemde Kontrol Ünitesiüzü beğeneceğ Haberleri görüntüler: Görünüm Blok her giriş için

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

haber rekoru insert <div class ="newsWrapper"> yaratır.

@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 yeşil renkte bu div boya olacaktır:

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

ben Blok görünümünde yeni div ekledi sorunu çözmeye çalıştı.

Ama nasıl doğru değilse ViewBag.IsPrize == truen.Description eğer kelimesini Ödülü, ve ViewBag.IsPrize == false içeren alabilirim?

Ben yöntem Blok değiştirmeye çalışmış:

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

ama yeşil renkte tüm haberler boyalar, sadece kelime Ödülü içerenler. Bunu yapmak istedikleri gibi

cevap

2

geliyor: yalnızca ViewBag tek değere sahip gibi

@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

Evet, işe yarıyor! Çok teşekkür ederim!!!!! – Dan

+0

@Dylan Bunu doğru cevap olarak işaretlemelisiniz, böylece gelecekteki okuyucular bunu kullanabilir. –

1

İlk deneyin yerine ViewBag için modeline bir özellik eklemek için, öyle görünüyor.

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

Ben kodu doğrulamadınız:

aşağıdaki gereksiz çünkü koşulu içinde hareket, durum yanlış olduğunda div boş olacaktır bu şekilde sınıfı tanımı true durumunu çıkarın ve denemek ama dene.