I find you should keep the library code in the model and only parts that are relevant to views inside them. --- In your case there is actually a third option. Let `OnGet` only handle the file. Remove `OrderBy` as this is a view's matter how it's displayed. Additionally initialize `itemListReportages` to an empty list if a file was empty. It'll save you the trouble of `null` checks later. public void OnGet() { PageSettings = (PagesSettings)HttpContext.Items["pagesettings"]; if (PageSettings == null) { return; } var fileContent = _fileService.GetFileContentCached(PageSettings.DataFile); itemListReportages = fileContent?.Length > 0 ? JsonConvert.DeserializeObject<List<Reportage>>(fileContent).Where(l => l.Published).ToList() : new List<Reportage>(); } We don't see whether you initialize `itemListReportages` but this view could crash because you don't use the null propagation operator here: `?.Count` > @for (var i = 0; i < Model.itemListReportages.Count; i++) > { > <div class="item"> > <div class="itembkg" style="background-image: url('@Model.itemListReportages[i].BkgImage');"></div> > <div class="itemtxt"> > <span>@Model.itemListReportages[i].Text</span> > </div> > </div> > } With a non-null list you can turn this into a `foreach` loop and put `OrderBy` here. It'll make the code shorter too as you now have an `item` variable and no longer have to acces them by index like `Model.itemListReportages[i]`: @foreach (var item in Model.itemListReportages.OrderBy(x => x.Name)) { <div class="item"> <div class="itembkg" style="background-image: url('@item.BkgImage');"></div> <div class="itemtxt"> <span>@item.Text</span> </div> </div> }