Что есть:
@{
int Ach1 = 3;
int Ach2 = 300;
int Ach3 = 500000;
}
@{ Ach1++; }@Ach1
Всё просто, получаем на выходе 4. А как быть если мне нужно перебирать их? То есть по сути мне нужно прибавлять единичку не =3, а к int Ach1 и получить int Ach2, int Ach3 и так далее. Нужно генерировать эти данные из массива в 1 блок представления, а не плодить их кучу в представлении.
Собственно сам блок:
<div class="col-md-6">
<div class="well well-sm">
<div class="row">
<div class="col-xs-3 col-md-3 text-center">
<img src="~/images/ach/Ach1.png" alt="Ach"
class="img-rounded img-responsive" />
</div>
<div class="col-xs-9 col-md-9 section-box">
<span class="ach-title-size">
Заголовок
@if (@info.Ach1 >= @Ach1 / 3)
{
<span class="pull-right glyphicon glyphicon-star text-warning"></span>
}
else
{
<span class="pull-right glyphicon glyphicon-star-empty text-warning"></span>
}
@if (@info.Ach1 >= @Ach1 / 3 * 2)
{
<span class="pull-right glyphicon glyphicon-star text-warning"></span>
}
else
{
<span class="pull-right glyphicon glyphicon-star-empty text-warning"></span>
}
@if (@info.Ach1 >= @Ach1)
{
<span class="pull-right glyphicon glyphicon-star text-warning"></span>
}
else
{
<span class="pull-right glyphicon glyphicon-star-empty text-warning"></span>
}
</span>
<p class="ach-text-size">
Инфо
</p>
@if (@info.@Ach1 >= Ach1)
{
<dt class="text-warning">Выполнено!</dt>
ach_status = "completed";
<span>@ach_status</span>
}
else
{
ach_status = "uncompleted";
<span class="pull-right ach-text-size">
@info.Ach1<span>/</span>@Ach1
</span>
<div class="row rating-desc">
<div class="col-md-12">
<div class="ach-progress">
<progress max="@Ach1" value="@info.Ach1">
</progress>
</div>
</div>
</div>
}
</div>
</div>
</div>
</div>
Кому не сложно, набросайте пожалуйста верный пример в консольке, или толкните в нужное русло. Спасибо!
По ходу решения вопроса - назрела более серьёзная сложность:
Как быть с базой тут же) Вот пример:
@foreach (Web.Models.DataBase.Achievements info in ViewBag.info)
{
@if @info.Ach1 >= @Ach1 / 3)
<span class="pull-right glyphicon glyphicon-star text-warning">
</span>
}
В табличке базы данных Achievements все строки так же по порядку. Начиная с Ach1 и заканчивая Ach50. Собственно так же любопытно, на сколько это реально?
Это можно реализовать вот таким образом.
\Views\Shared\_Achievement.cshtml
.Перенесите разметку для Achievement
в Partial View, а в самой вьюхе отобразите Partial View используя метод Html.Partial
и передавайте ей экземпляр Achievement
через Model
.
@foreach (Web.Models.DataBase.Achievements info in ViewBag.info)
<div class="col-md-6">
<div class="well well-sm">
<div class="row">
@Html.Partial("_Achievement", info)
</div>
</div>
</div>
}
/**/
В _Achievement.cshtml
используйте ViewData.ModelMetadata.Properties
, чтобы перечислить все свойства и вывести их на экран.
@{
Dictionary<string, int> Achs = new Dictionary<string, int>() {
{ "Ach1", 3 },
{"Ach2", 300 },
{"Ach3", 500000 }
};
string ach_status;
}
@foreach (ModelMetadata property in ViewData.ModelMetadata.Properties) {
if (property.PropertyName.StartsWith("Ach")) {
<div class="col-xs-3 col-md-3 text-center">
<img src="@string.Format("~/images/ach/{0}.png", property.PropertyName)" alt="Ach"
class="img-rounded img-responsive" />
</div>
<div class="col-xs-9 col-md-9 section-box">
<span class="ach-title-size">
Заголовок
@if ((int)property.Model >= Achs[property.PropertyName] / 3) {
<span class="pull-right glyphicon glyphicon-star text-warning"></span>
} else {
<span class="pull-right glyphicon glyphicon-star-empty text-warning"></span>
}
@if ((int)property.Model >= Achs[property.PropertyName] / 3 * 2) {
<span class="pull-right glyphicon glyphicon-star text-warning"></span>
} else {
<span class="pull-right glyphicon glyphicon-star-empty text-warning"></span>
}
@if ((int)property.Model >= Achs[property.PropertyName]) {
<span class="pull-right glyphicon glyphicon-star text-warning"></span>
} else {
<span class="pull-right glyphicon glyphicon-star-empty text-warning"></span>
}
</span>
<p class="ach-text-size">
Инфо
</p>
@if ((int)property.Model >= Achs[property.PropertyName]) {
<div class="text-warning">Выполнено!</div>
ach_status = "completed";
<span>@ach_status</span>
} else {
ach_status = "uncompleted";
<span class="pull-right ach-text-size">
@property.Model<span>/</span>@Achs[property.PropertyName]
</span>
<div class="row rating-desc">
<div class="col-md-12">
<div class="ach-progress">
<progress max="@Achs[property.PropertyName]" value="@((int)(int)property.Model)">
</progress>
</div>
</div>
</div>
}
</div>
}
}
Если я верно понял, у вас есть наборы переменных Arch1 ... Arch50
и вам надо их как то положить в массив, чтобы завернуть какую то конструкцию в цикл вместо того, чтобы её 50 раз повторять в коде.
Приведу небольшой пример. Допустим, у нас есть переменные
int Ach1 = 3;
int Ach2 = 300;
int Ach3 = 500000;
Мы можем их положить в массив вот так
int[] array = new int[] {Ach1, Ach2, Ach3};
После этого можем пройтись по ним циклом
foreach (var ach in array)
{
Console.WriteLine(ach);
}
Вывод, как ожидается
3
300
500000
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Всем здравствуйтеЕсть у меня TabControl с двумя вкладками
Один умелец выложил в общий доступ код, позволяющий отключить event AssemblyLoad