我的 View 显示一个表格,其中包含一些数据的状态,按列分组:
- 准备就绪
- 完成
- 已跳过
- 不适用
我每次都有大约 6 列和多行(下面是简化的示例) 我需要设置单元格背景颜色,这可以通过 css 轻松完成,但是每次通过 View 中的重复代码设置样式类对于每列来说都是非常耗时的,而且容易出错。
所以我想到使用一个javascript函数,使用模型值(上面列出的状态)的参数来动态设置类css样式。
我不是 100% 确定如何去做。
示例代码:
@using NS.Data
@model NS.Models.PublicationsModel
@{
ViewBag.Title = "PublicationState";
Layout = "~/Views/Shared/_Layout.cshtml";
var PublicationState = Model.PublicationState.ToList();
}
@*Below the idea of the intended "reusable" javascript function*@
<script type="text/javascript" language="javascript">
$(function ToggleCellColour(StepState) {
switch (StepState) {
case "Ready":
return "cssReadyState";
break;
case "Done":
return "cssDoneState";
break;
case "Skipped":
return "cssSkippedState";
break;
default:
return "";
break;
}
});
</script>
<h2>Publication State</h2>
@Html.ActionLink("Back to previous page", "ActionName", "ControllerName", new { returnActive = true }, null)
<table class="table">
<tr>
<th>Client</th>
<th>Availability Communicated to Team</th>
<th>Schedule Test</th>
<th>Tested</th>
<th>Planned Prod Implementation</th>
<th>Implemented to Prod</th>
</tr>
@*Returned Publication States: N/A, Ready, Skipped, Done*@
@foreach (var PubSt in PublicationState)
{
<tr>
<td>@PubSt.Client</td>
<td align="center" class="ToggleCellColour(@PubSt.Availability_Communicated_to_Team)"> @*This is where I thought of calling the javascript method to determine the css formatting for the cell*@
@if (PubSt.Availability_Communicated_to_Team != "N/A")
{
if (PubSt.Availability_Communicated_to_Team == "Done" || PubSt.Availability_Communicated_to_Team == "Skipped")
{
<img src="~/Images/MailClosed.png" />
}
else @*The "Ready" State*@
{
<img src="~/Images/MailOpen.png" />
}
}
else
{
@PubSt.Availability_Communicated_to_Team
}
</td>
<td align="center" class="ToggleCellColour(@PubSt.Schedule_Test)">
@if (PubSt.Schedule_Test != "N/A")
{
if (PubSt.Schedule_Test == "Done" || PubSt.Schedule_Test == "Skipped")
{
<img src="~/Images/MailClosed.png" />
}
else
{
<img src="~/Images/MailOpen.png" />
}
}
else
{
@PubSt.Schedule_Test
}
</td>
<td align="center" class="ToggleCellColour(@PubSt.Tested)">
@if (PubSt.Tested != "N/A")
{
if (PubSt.Tested == "Done" || PubSt.Tested == "Skipped")
{
<img src="~/Images/MailClosed.png" />
}
else
{
<img src="~/Images/MailOpen.png" />
}
}
else
{
@PubSt.Tested
}
</td>
<td align="center" class="ToggleCellColour(@PubSt.Planned_Prod_Implementation)">
@if (PubSt.Planned_Prod_Implementation != "N/A")
{
if (PubSt.Planned_Prod_Implementation == "Done" || PubSt.Planned_Prod_Implementation == "Skipped")
{
<img src="~/Images/MailClosed.png" />
}
else
{
<img src="~/Images/MailOpen.png" />
}
}
else
{
@PubSt.Planned_Prod_Implementation
}
</td>
<td align="center" class="ToggleCellColour(@PubSt.Implemented_on_Prod)">
@if (PubSt.Implemented_on_Prod != "N/A")
{
if (PubSt.Implemented_on_Prod == "Done" || PubSt.Implemented_on_Prod == "Skipped")
{
<img src="~/Images/MailClosed.png" />
}
else
{
<img src="~/Images/MailOpen.png" />
}
}
else
{
@PubSt.Implemented_on_Prod
}
</td>
</tr>
}
}
</table>
可以重复 if else 语句代码,就像我显示图像时所做的那样,但是我认为通过使用 javascript 函数来简化事情,可以省去麻烦并引入更少的错误。
任何帮助将不胜感激。
最佳答案
如果您使用 JQuery,您可以向单元格添加数据属性以及一些允许您定位它的标识符(例如类名),然后让不显眼的 JS 为您设置 CSS 类:
<tr>
<td class="coloredCell" data-availability="@PubSt.Planned_Prod_Implementation">stuff</td>
</tr>
然后使用JS设置文档颜色:
$(function ()
{
$('.coloredCell').each(function (index, element)
{
var availability = $(element).attr("data-availability");
var cssClass;
switch (availability)
{
case "Ready":
cssClass = "cssReadyState";
break;
case "Done":
cssClass = "cssDoneState";
break;
case "Skipped":
cssClass = "cssSkippedState";
break;
default:
cssClass = "";
break;
}
$(element).addClass(cssClass);
});
});
关于javascript - 将单个模型值(字符串)作为参数传递给可重用的 javascript 函数,以在 MVC View 中设置表格单元格类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53640021/