The easiest way is to rely on the Episerver routing, and the in-built modelbinder (IMO )
Example:
Make your javascript request to the url /products/product-search/ApplySearch - rather than rely on the default MVC routing of {controller}/{Action} which in this case would be ProductSearchPage/ApplySearch. Although both of these requests will be routed correctly, the currentPage object won't be bound as Episerver can't work out the context of the request, ie what content the request should be mapped to.
This appraoch assumes that you will always know the editorially controlled url of your ProductSearchPage, but you could easily get around that by having a content reference stored or 'locking' down the ability for editors to change the ProductSearchPage url.
I'm calling this action in my controller:
Snippet