Ответ 1
Я бы рекомендовал сделать это в прямом CSS (подробнее см. здесь):
tr:nth-child(odd) { background-color:#eee; }
tr:nth-child(even) { background-color:#fff; }
Учитывая следующий код Razor:
<tbody>
@foreach (Profession profession in Model)
{
<tr>
<td>@profession.Name</td>
<td>@profession.PluralName</td>
<td>@Html.ActionLink("Edit", "AddOrEdit", new { Id = profession.ProfessionID })</td>
</tr>
}
</tbody>
Какой самый простой способ обеспечить какой-то альтернативный стиль строк? (т.е. различные стили для нечетных и четных строк.)
Кажется, я не могу добавить произвольный С#, чтобы объявить переменную bool
, которая перебрасывает каждую итерацию цикла foreach
, чтобы, например, установить имя класса для tr
.
Я бы рекомендовал сделать это в прямом CSS (подробнее см. здесь):
tr:nth-child(odd) { background-color:#eee; }
tr:nth-child(even) { background-color:#fff; }
JQuery может сделать это на стороне клиента (и я, вероятно, использовал бы скрипты на стороне клиента, а не серверную логику).
$("tr:odd").css("background-color", "#bbbbff");
Вы также можете использовать просто переменную для установки класса css (почти псевдокода):
@foreach (Profession profession in Model)
{
@i++;
<td class="@i%2==0?"even":"odd"">
}
Там много способов, как и другие. С моей точки зрения, это было бы не самым простым, но немного легче:
<tbody>
@var oddEven = new List { "odd", "even" };
@var i = 0;
@foreach (Profession profession in Model)
{
<tr style="@oddEven[i++ % 2]">
<td>@profession.Name</td>
<td>@profession.PluralName</td>
<td>@Html.ActionLink("Edit", "AddOrEdit", new { Id = profession.ProfessionID })</td>
</tr>
}
</tbody>
Извините, что это немного тупой ответ, поскольку вы уже делаете разметку, но поскольку ваша таблица выглядит довольно стандартно, вы можете переключиться на использование помощника веб-гридов Mvc. Это аккуратный инструмент для таблиц, подобных этому. Я думаю, что ваш код будет немного короче/проще для этой конкретной таблицы, и фактическая реализация чередующегося стиля строки будет очень простой:
alternatingRowStyle: "alternateRow"
Дополнительная информация о этом блоге asp.net.
Поскольку вы используете MVC Razor, используя функцию @helper, это самый простой, самый чистый и лучший подход.
В папке App_Code вашего проекта добавьте новый элемент или измените существующий файл CustomeHelpers.cshtml со следующим кодом:
@helper AlternateBackground(string color, Int32 iViewBagCount) {
if (iViewBagCount == null) { iViewBagCount = 0; }
<text>style="background-color:@(iViewBagCount % 2 == 1 ? color : "none")"</text>
iViewBagCount++;
}
Затем на вашем представлении внутри цикла foreach замените код tablerow на то, что показано ниже:
<tr @CustomHelpers.AlternateBackground("#ECEDEE", ViewBag.count)>
или
<tr @CustomHelpers.AlternateBackground("Red", Model.Count())>
В зависимости от того, что подходит для вашего цикла foreach
Таким образом вам нужно только добавить функцию @Helper один раз, и она распространяется по всему вашему приложению, и она может быть вызвана на каждом представлении по мере необходимости, ссылаясь на функцию @CustomHelpers. Создайте столько помощников, сколько вам нужно, и назовите их с помощью @CustomeHelpers.NameOfYourFunction() и оттуда.
Простой и эффективный...