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

时间:2016-02-17 15:02:18

标签: c# unit-testing asp.net-mvc-5

我发现了类似的问题,但他们使用的是数据网格,我正在使用表格类。我想分离我用来更改我在View中创建的行的属性的逻辑,并将逻辑放在Controller中。 这是我可以单元测试我的逻辑。目前,这就是我将数据发送到View

的方式
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>

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

您始终可以将视图中的逻辑放在实际的对象模型上,然后在视图中使用它,例如:

public class MyModel
{
    public string CssClass
    {
        get
        {
            return Deadline.Date < DateTime.Today && !Completed ? "overdue" : "notoverdue";
        }
    }
}

然后在您的视图中使用此属性:

<li class="@item.CssClass" ..... />