我的网站有一个显示新闻的列。包含“奖品”一词的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);
但是它会以绿色描绘所有新闻,而不仅仅是那些包含“奖”这个词的新闻。
答案 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>
}
我还没有验证代码,但是试试看。