Search code examples
c#razorasp.net-core

How pass objects from one page to another on ASP.Net Core with razor pages?


I'm developing a web application using Asp.net core 2.0 with razor pages. I'm creating an object with some data and want to send that object to another page.

Actually I'm doing this:

var customObject = new{
   //some values
};
return RedirectToPage("NewPage", customObject);

I see that the url has the values of the object I'm sending, but I can't find how to take that values (in the NewPage instance).

Can anybody knows how to share objects between razor pages? Is this the correct way to achieve it? or Is there another better way?

Thanks in advance


Solution

  • 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.