Reputation: 425
I'm looking to order a table which I have set conditions on to display by a type. For example, I have conditions which make a row green, a row red, a row blue. I'd like to order these tables so it is displayed by green rows first, blue rows second and red rows third. I'm creating the conditions by using razor c# to categorise them into their colour
I've searched and found unrelated issues. They're trying to tell me how to order things by descending or ascending order in terms of name etc. I cannot find a way to apply it to my conditions I have created.
From the answer suggested:
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;
}
In my view:
@foreach (var fileDetail in Model.Folder1.FileDetails.OrderBy(fd => fd.BackgroundColour == "lightgreen"? 0: (fd.BackgroundColour == "lightcoral"? 1 : 2))){
<td style="background-color: @fileDetail.BackgroundColour">
Doesn't let me use operators such as == in view to the method above? Also the razor @ in the background colour isn't recognised for some reason and asks for a proper colour.
(Had to delete the previous code since it said it wasn't properly formatted, refused to let me edit the post.)
Upvotes: 1
Views: 221
Reputation: 68707
Move all those if
conditions to the model. Your view should just have
<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>
Then you could change the order based in the foreach
or in the model itself.
@foreach(var fileDetail in Model.Folder1.FileDetails
.OrderBy(fd => fd.BackgroundColor == "green"? 0: (fd.BackgroundColor == "red"? 1 : 2)))
Although it just looks like a code smell, relying on color to set the order.
Upvotes: 1