C#包含方法

时间:2013-06-26 20:19:09

标签: c# contains viewbag

我的网站有一个显示新闻的列。包含“奖品”一词的DIV-s必须涂成绿色。 (如果一个人创建了一个记录(一个新闻)而没有指定奖品(没有单词“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");
   }

在另一个方法Block of News Controller I中显示新闻:

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

GreenNewsClass会将此div绘制为绿色。

但如果ViewBag.IsPrize == true包含单词Prize,我如何获得n.Description, 和ViewBag.IsPrize == false如果不是?

我尝试更改方法Block:

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 个答案:

答案 0 :(得分: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>
}

答案 1 :(得分: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>
}

我还没有验证代码,但是试试看。