javascript - 将单个模型值(字符串)作为参数传递给可重用的 javascript 函数,以在 MVC View 中设置表格单元格类

标签 javascript c# asp.net-mvc razor

我的 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/

相关文章:

javascript - 如何将大型 jQuery 对象数组合并为一个?

javascript - 如何使 jQuery 的可拖动功能扩展容器?

javascript - 下一次 safari 的发布日期

c# - ToLower() 不是小写字符串?

asp.net-mvc - 使用SQL Server数据库而不是本地数据库asp.net mvc 5数据库优先的asp.net标识表

c# - ASP Net MVC 5 SiteMap-将面包屑构建到另一个 Controller

javascript - 在 ASP.NET MVC 中填充莫里斯图表

javascript - 将带有 rowspan 和 colspan 的 html 表导出到 csv 或 xls

c# - 无法从 Regex 组获取特定文本

C# Entity Framework 分页