gpt4 book ai didi

javascript - 如果自表中日期以来过去 5 个月,如何对 mvc 表中的行进行着色

转载 作者:行者123 更新时间:2023-11-28 17:50:34 27 4
gpt4 key购买 nike

我是 Web 开发和 MVC 的新手,我有一个驱动程序模型,带有 public LastEyeCheck { get;放; } 属性,在 index.cshtml 中有一个驱动程序表。

我的问题:我想将自上次视力检查后 5 个月内与司机的行涂成红色,我该怎么做?我应该在哪里添加所需的代码?在 index.cshtml 中?在模型中?在 Controller 中?

enter image description here

驱动程序型号:

    public class Driver
{
[Key]

public int LicenceID { get; set; }

public string FirstName { get; set; }

....

[DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime LastEyeCheck { get; set; }

[EmailAddress]
public string Email { get; set; }
}

public class DriverDBContext : DbContext
{
public DbSet<Driver> Drivers { get; set; }
}

index.cshtml:

@model IEnumerable<try4.Models.Driver>

@{
ViewBag.Title = "Index";
}
<script src="~/Scripts/MyJs.js"></script>
<h2>Index</h2>

<p>
@Html.ActionLink("Create New", "Create")
</p>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.FirstName)
</th>
....
<th>
@Html.DisplayNameFor(model => model.LastEyeCheck)
</th>

<th>
@Html.DisplayNameFor(model => model.Email)
</th>
<th></th>
</tr>

@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.FirstName)
</td>
....
<td>
@Html.DisplayFor(modelItem => item.LastEyeCheck)
</td>

<td>
@Html.DisplayFor(modelItem => item.Email)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.LicenceID }) |
@Html.ActionLink("Details", "Details", new { id=item.LicenceID }) |
@Html.ActionLink("Delete", "Delete", new { id=item.LicenceID })
</td>
</tr>
}

</table>

最佳答案

您首先需要检查LastEyeCheck的日期是否已过期,例如您可以通过与今天的日期加上 5 个月进行比较来使用

bool isOverDue = item.LastEyeCheck > DateTime.Today.AddMonths(5);

然后你可以有条件地添加 classstyle属性为<td>元素。

至于逻辑去哪里,可以放在 View 中,也可以放在模型中,也可以放在 Controller 中。

例如仅在 View 中

@foreach (var item in Model)
{
bool isOverDue = item.LastEyeCheck > DateTime.Today.AddMonths(5);
var className = isOverDue ? "class=overdue" : "";
<tr @className>
....

或者通过在 View 模型中创建一个返回 bool 的只读属性

public class DriverVM
{
....
public DateTime LastEyeCheck { get; set; }
public bool IsOverDue
{
get { return LastEyeCheck > DateTime.Today.AddMonths(5); }
}
}

并在 View 中

@foreach (var item in Model)
{
var className = item.isOverDue ? "class=overdue" : "";
<tr @className>
....

或者在 Controller 中(在 View 模型中使用简单的 get; set; 属性)

public class DriverVM
{
....
public DateTime LastEyeCheck { get; set; }
public bool IsOverDue { get; set; }
}

public ActionResult Index()
{
IEnumerable<DriverVM> model = db.Drivers.ToList().Select(x => new DriverVM
{
....
LastEyeCheck = x.LastEyeCheck,
IsOverDue = x.LastEyeCheck > DateTime.Today.AddMonths(5)
});
return View(model);
}

所有这些选项都可以工作,但是在 MVC 中普遍接受的是

  • View 不应该包含复杂的逻辑(尽管这是 View 具体的逻辑所以它不是没有道理的),
  • View 应基于 viewmodels并且 View 模型应该是“哑”的(简单的 get; set; 属性),

并且您需要考虑如果您稍后根据其他数据更改逻辑会发生什么(例如,60 岁以上的驾驶员为 5 个月,60 岁以下的驾驶员为 12 个月),因此我建议使用最后一个选项。

关于javascript - 如果自表中日期以来过去 5 个月,如何对 mvc 表中的行进行着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45650380/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com