ASP.NET MVC根据模型中的数据从C#控制器更改表行属性
我发现了类似的问题,但都是关于datagrids的,我使用的是table类。我想分离用于更改视图中创建的行的属性的逻辑,并将该逻辑放入控制器中。 这样我就可以对我的逻辑进行单元测试了。目前,这就是我将数据发送到视图的方式ASP.NET MVC根据模型中的数据从C#控制器更改表行属性,c#,unit-testing,asp.net-mvc-5,C#,Unit Testing,Asp.net Mvc 5,我发现了类似的问题,但都是关于datagrids的,我使用的是table类。我想分离用于更改视图中创建的行的属性的逻辑,并将该逻辑放入控制器中。 这样我就可以对我的逻辑进行单元测试了。目前,这就是我将数据发送到视图的方式 public ViewResult Index() { var todoes = repository.GetAll(); return View(todoes); } 这就是我目前构建表的方式,并为过期任务的文本着色 @
public ViewResult Index()
{
var todoes = repository.GetAll();
return View(todoes);
}
这就是我目前构建表的方式,并为过期任务的文本着色
@foreach (var item in Model)
{
<tr>
<td>
<li class="@(item.Deadline.Date < DateTime.Today && !item.Completed ? "overdue" : "notoverdue")">
@Html.DisplayFor(modelItem => item.TaskName)
</li>
</td>
<td>
@Html.DisplayFor(modelItem => item.Deadline)
</td>
<td>
@Html.DisplayFor(modelItem => item.Completed)
</td>
<td>
@Html.DisplayFor(modelItem => item.Moredetails)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new {id = item.TodoId}) |
@Html.ActionLink("Details", "Details", new {id = item.TodoId}) |
@Html.ActionLink("Delete", "Delete", new {id = item.TodoId})
</td>
</tr>
}
<style type="text/css">
li.overdue {
color: lightcoral;
}
li.notoverdue {
color: black;
}
</style>
@foreach(模型中的变量项)
{
@DisplayFor(modelItem=>item.TaskName)
@DisplayFor(modelItem=>item.Deadline)
@DisplayFor(modelItem=>item.Completed)
@DisplayFor(modelItem=>item.Moredetails)
@ActionLink(“编辑”,“编辑”,新的{id=item.TodoId})|
@ActionLink(“详细信息”,“详细信息”,新的{id=item.TodoId})|
@ActionLink(“Delete”,“Delete”,new{id=item.TodoId})
}
李:过期了{
颜色:浅珊瑚;
}
李维德{
颜色:黑色;
}
谢谢您的时间。您可以将视图中的逻辑放在实际对象模型上,然后在视图中使用它,例如:
public class MyModel
{
public string CssClass
{
get
{
return Deadline.Date < DateTime.Today && !Completed ? "overdue" : "notoverdue";
}
}
}
公共类MyModel
{
公共字符串CssClass
{
得到
{
返回截止日期。日期
然后在视图中使用此属性:
<li class="@item.CssClass" ..... />
您的问题有点不清楚。您是说要移动将过期/未过期属性分配给表的逻辑吗?如果是这样的话,这个逻辑属于视图,因为它处理数据的显示方式,我将把它放在这里。你的观点很好,但我认为它是功能的业务逻辑的一部分。但是,我仍然需要学习一个关于TDD和视图的教程,也许我会学习如何在视图中测试逻辑。视图中没有任何逻辑(或者尽可能少)。谢谢,但我不能对该逻辑进行单元测试,这是重构过期功能的目标。您可以在对象上测试这一点,例如Assert.Equals(myList[0].CssClass,“过期”)代码>谢谢Ric,我将实施该修复,并将此标记为已解决。谢谢你抽出时间。