5

我的网站有一栏显示新闻。带有这些包含“奖品”一词的新闻的 DIV-s 必须涂成绿色。(如果一个人创建了一条记录(一条新闻)而没有指定 Prize(没有“Prize”一词),则不需要绿色。但是如果一个人填写了字段 model.Prize(所以在文本中我们有一个词"Prize") div 必须涂成绿色。

为了创造新闻,有一个领域model.Prize

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

model.Prize 的值为创建新新闻记录的 Controller。

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

在新闻控制器的另一种方法块中,我显示新闻:

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">
    <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 的问题:

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

将把这个GreenNewsClassdiv 涂成绿色。

ViewBag.IsPrize == true但是如果n.Description包含单词 Prize,我怎么能得到,ViewBag.IsPrize == false如果不是?

我试图改变方法块:

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

但它将所有新闻都涂成绿色,不仅仅是那些包含“奖”字的新闻。

4

2 回答 2

2

听起来你想这样做:

@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>
}
于 2013-06-26T20:22:20.340 回答
1

首先尝试将一个属性添加到您的模型而不是您的ViewBag,看起来您的ViewBag.

删除true条件,因为它是多余的,将类定义移动到条件中,这样当条件为假时 div 将为空,然后尝试以下操作:

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

我尚未验证代码,但请尝试一下。

于 2013-06-26T20:29:14.680 回答