I don't know if that might help you or it is good practice for MVVM flavours like Razor, but inside ASP.NET Core API projects I often use custom global DI'ed services, like
public void ConfigureServices(IServiceCollection services) { ... services.AddSingleton<IMyService, MyService>(); ... services.AddMvc(); }
You can exchange data between your IndexModel and a CustomModel eg. by setting it like
public class CustomModel : PageModel { public IMyService _myService; public CustomModel(IMyService myService) { _myService = myService; } public async Task<IActionResult> OnPostAsync(...) { ... _myService.SetDataOrSometing(...); ... return RedirectToPage(); } }
and retrieving it like
public class IndexModel : PageModel { public IMyService _myService; public IndexModel(IMyService myService) { _myService = myService; } public void OnGet() { var data = _myService.GetDataOrSomething(); } }
From here you can also use an ObserveableCollection and register events to get the updates down to your PageModels.
IMHO this is a way to pass objects from one page to another with a clean separation of concerns.
GETin Razor Pages.