2013-06-26 4 views
5

내 사이트에 뉴스를 표시하는 열이 있습니다. "상"이라는 단어가 포함 된이 뉴스의 DIV-s는 초록색으로 그려야합니다. ("상품"이라는 단어가없는) 상을 지정하지 않고 사람이 기록 (뉴스)을 만든 경우, 초록은 필요하지 않습니다. 그러나 사람이 필드 모델을 채운 경우. 미리보기 (텍스트에서 우리는 "상"이) 사업부가 녹색으로 색칠해야합니다.C# 포함 된 메서드

뷰에서 뉴스를 만들기위한 필드 model.Prize

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

에게이 model.Prize의 값은 새로운 뉴스 레코드를 생성 컨트롤러 소요

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

또 다른 방법으로는, ntroller 나는 뉴스를 표시합니다보기 블록의 각 항목에 대해

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

은의 뉴스 기록 삽입 <div class ="newsWrapper">을 만듭니다.

@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는 녹색이 사업부를 페인트합니다

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

는 내가 블록보기의 새로운 사업부를 추가 문제 를 해결하기 위해 노력했다.

그러나 ViewBag.IsPrize == true의 경우 및 ViewBag.IsPrize == false 인 경우 n.Description에 Prize라는 단어가 포함 된 경우 어떻게해야합니까?

내가 방법 블록 변경 시도 :

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

을하지만 녹색 색상의 모든 뉴스를 페인트뿐만 아니라 단어 상을 포함하는 그. 이 작업을 수행 할 같은

답변

2

그것은 소리 : 당신은 당신의 ViewBag에서 하나의 값을 가지고있는 것처럼

@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

예, 작동합니다. 정말 고마워요 !!!!! – Dan

+0

@Dylan 당신은 이것을 올바른 답으로 표시해야합니다. 그래서 미래의 독자들이 사용할 수 있습니다. –

1

첫 번째 시도가 대신 ViewBag에 모델에 속성을 추가 할 것 같습니다.

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

내가 코드를 확인하지 않은 :

다음은 중복 때문에 조건 내에서 이동 조건이 거짓 일 때 사업부가 비어 있습니다 그런 식으로 클래스 정의를 true 조건을 제거하고 시도 그러나 그것을 밖으로 시도하십시오.