ASP.NET MVC根据模型中的数据从C#控制器更改表行属性

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); } 这就是我目前构建表的方式,并为过期任务的文本着色 @

我发现了类似的问题,但都是关于datagrids的,我使用的是table类。我想分离用于更改视图中创建的行的属性的逻辑,并将该逻辑放入控制器中。 这样我就可以对我的逻辑进行单元测试了。目前,这就是我将数据发送到视图的方式

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,我将实施该修复,并将此标记为已解决。谢谢你抽出时间。