В поиске решения - в соседней теме подсказали как верно реализовать задачу. Реализовал, работает частично. Проблема в одном: По какой-то причине ((int)property.Order по всем позициям равен 10000. Хотя в базе и в помине нет у данного логина этих значений...
View:
@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer
@inject IHtmlLocalizer<Resource> Localizer
@{
ViewData["Title"] = @Localizer["Achievement.Achievements"];
}
@if (User.Identity.IsAuthenticated)
{
@foreach (Web.Models.DataBase.Achievements info in ViewBag.info)
{
<div class="panel panel-default inf-content">
<div class="panel panel-default">
<div class="panel-heading clearfix">
<div class="text-muted pull-left"><h4>@Localizer["Achievement.Achievements"]</h4></div>
</div>
</div>
<div class="panel-body text-muted">
<div class="form-horizontal">
<div class="row">
@await Html.PartialAsync("_AccountMenu")
@await Html.PartialAsync("_Achievements", info)
</div>
</div>
</div>
</div>
}
}
Partial:
@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer
@inject IHtmlLocalizer<Resource> Localizer
@using Microsoft.AspNetCore.Mvc.ModelBinding
@{
Dictionary<string, int> Achs = new Dictionary<string, int>() {
{"Achievement1", 3 },
{"Achievement2", 300 },
{"Achievement3", 500000 },
{"Achievement4", 150 },
{"Achievement5", 50000 },
{"Achievement6", 1000 },
{"Achievement7", 1000 },
{"Achievement8", 50 },
{"Achievement9", 25 },
{"Achievement10", 25 },
{"Achievement11", 10 },
{"Achievement12", 75 },
{"Achievement13", 250 },
{"Achievement14", 250 },
{"Achievement15", 300 },
{"Achievement16", 300 },
{"Achievement17", 300 },
{"Achievement18", 100 },
{"Achievement19", 100 },
{"Achievement20", 500 },
{"Achievement21", 500 },
{"Achievement22", 100 },
{"Achievement23", 100 },
{"Achievement24", 100000 },
{"Achievement25", 30 },
{"Achievement26", 5 },
{"Achievement27", 10 },
{"Achievement28", 5 },
{"Achievement29", 50 },
{"Achievement30", 30 },
{"Achievement31", 3 },
{"Achievement32", 300 },
{"Achievement33", 300 },
{"Achievement34", 300 },
{"Achievement35", 300 },
{"Achievement36", 300 },
{"Achievement37", 300 },
{"Achievement38", 300 },
{"Achievement39", 300 },
{"Achievement40", 300 },
{"Achievement41", 3 },
{"Achievement42", 300 },
{"Achievement43", 300 },
{"Achievement44", 300 },
{"Achievement45", 300 },
{"Achievement46", 300 },
{"Achievement47", 300 },
{"Achievement48", 300 },
{"Achievement49", 300 },
{"Achievement50", 300 }
};
int title = 1;
int info = 1;
}
@foreach (ModelMetadata property in ViewData.ModelMetadata.Properties)
{
if (property.PropertyName.StartsWith("Achievement"))
{
<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="@string.Format("/images/achievements/{0}.png", property.PropertyName)" alt="Achievement"
class="img-rounded img-responsive" />
</div>
<div class="col-xs-9 col-md-9 section-box">
<span class="ach-title-size">
@Localizer["Achievement.Title" + title++]
@if ((int)property.Order >= 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.Order >= 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.Order >= 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="achievement-text-size">
@Localizer["Achievement.Info" + info++]
</p>
@if ((int)property.Order >= Achs[property.PropertyName])
{
<span class="text-warning">Выполнено!</span>
}
else
{
<span class="pull-right achievement-text-size">
@property.Order<span>/</span>@Achs[property.PropertyName]
</span>
<div class="row rating-desc">
<div class="col-md-12">
<div class="achievement-progress">
<progress max="@Achs[property.PropertyName]" value="@((int)(int)property.Order)">
</progress>
</div>
</div>
</div>
}
</div>
</div>
</div>
</div>
}
}
Всем заранее спасибо за любой совет!
В ASP.NET Core свойство ModelMetadata.Model изменилось на ModelMetadata.PropertyGetter. Это делегат, позволяющий вычислить значение любой произвольной модели, а не какой-то заранее заданной. Вот так: @property.PropertyGetter(Model)
.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Вопрос скорее идеологический, как правильно подходить к задаче обновления данных в ModelView
Можно ли получить список глобальных хуков, которые установлены в системе в данный момент?
Замер скоростей поиска уникальных значений показал разницу в 2 раза