【问题标题】:How to order a table in a specific order based on condition of the table data in asp.net?如何根据asp.net中表数据的条件以特定顺序对表进行排序?
【发布时间】:2017-06-13 15:58:21
【问题描述】:

我的问题:

我希望订购一张我已设置条件以按类型显示的表格。例如,我有使一行绿色、一行红色、一行蓝色的条件。我想订购这些表格,使其首先显示为绿色行,第二个是蓝色行,第三个是红色行。我通过使用 razor c# 将它们分类为它们的颜色来创造条件

我的研究:

我已经搜索并发现了不相关的问题。他们试图告诉我如何根据名称等按降序或升序对事物进行排序。我找不到将其应用于我创建的条件的方法。

我的努力:

根据建议的答案:

public string BackgroundColour()
    {
        string colour = string.Empty;
        if (ExistsBothFolder && IsContentSame)
        {
            colour = "lightgreen";
        }
        else if (!HasSameContentWithAnotherFileName && !ExistsBothFolder && !IsContentSame && !IsDateModifiedSame)
        {
            colour = "lightcoral";
        }
        else if (ExistsBothFolder && !IsContentSame)
        {
            colour = "lightskyblue";
        }
        else if (HasSameContentWithAnotherFileName && !ExistsBothFolder)
        {
            colour = "orange";
        }
        return colour;
    }

在我看来:

    @foreach (var fileDetail in Model.Folder1.FileDetails.OrderBy(fd => fd.BackgroundColour == "lightgreen"? 0: (fd.BackgroundColour == "lightcoral"? 1 : 2))){

    <td style="background-color: @fileDetail.BackgroundColour">

不让我针对上面的方法使用==之类的运算符吗? 此外,由于某种原因,背景颜色中的剃须刀 @ 无法识别,并要求提供正确的颜色。

(不得不删除之前的代码,因为它说它的格式不正确,拒绝让我编辑帖子。)

【问题讨论】:

  • 到处都是== true 真烦人。
  • 有更好的选择吗?
  • 你根本不需要,(fileDetail.ExistsBothFolder == true &amp; fileDetail.IsContentSame == false)应该是(fileDetail.ExistsBothFolder &amp;&amp; !fileDetail.IsContentSame)
  • 另外&amp; 应该是&amp;&amp;,否则即使左边部分已经为假,它也会评估右边部分。
  • 我想我已经习惯使用它了,谢谢

标签: c# html asp.net razor


【解决方案1】:

将所有if 条件移至模型。你的视图应该有

<td style="background-color: @fildeDetail.BackgroundColor">
    @if (fileDetail.IsFolder )
    {
        <img alt="ListView" src="@Url.Content("https://s27.postimg.org/3ywaao4sz/new_Folder1.png")" style="width: 20px; height: 25px;" />
    }
    else
    {
        <img alt="ListView" src="@Url.Content("http://www.clker.com/cliparts/N/K/u/R/m/8/file-icon-md.png")" style="width: 20px; height: 25px;" />
    }
    <a href="#Section1">@Html.DisplayFor(modelItem => fileDetail.Name)</a>
</td>

然后您可以根据foreach 或模型本身更改顺序。

@foreach(var fileDetail in Model.Folder1.FileDetails
    .OrderBy(fd => fd.BackgroundColor == "green"? 0: (fd.BackgroundColor == "red"? 1 : 2)))

虽然它只是看起来像代码味道,但依靠颜色来设置顺序。

【讨论】:

  • 如果我将它移到模型中,if 语句会返回什么?你将如何返回颜色?
  • @someguy76 它会返回一个颜色字符串,比如“green”。
  • 抱歉,回复晚了,我把我的逻辑放到了一个管理器文件夹中,需要 2 个输入进行比较。我的模型只是创建 getter 和 setter 来分配值。我不确定如何放置 if 逻辑以返回颜色字符串
  • 我试图将它放在我的模型中,然后按功能使用顺序,但是当我运行该视图页面时它只是给我一个错误
  • 当我尝试使用 == 你在我创建的名为 backgroundcolour 的方法中使用时会引发编译器错误
猜你喜欢
  • 1970-01-01
  • 2011-04-03
  • 1970-01-01
  • 2020-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-15
相关资源
最近更新 更多