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>
    }