Sounds like a job for MVC3 and Razor Views to me. I've done something similar with a partial view for my grid which in turn renders partial views for the sort headers and the paging controls, all of which are (or contain) Ajax.ActionLink items which pass sort by, sort direction, rows per page, etc. args to my GoToPage, SortGrid, and ChangeRowsPerPage actions.
I also have a PagingModel, a SortHeaderModel which contains a PagingModel, and models for the individual tables, which also include PagingModel. With the table name as a property in the paging model, the Ajax.ActionLinks can pass that back to the actions they call, and a switch block can be used to pass the other parameters to the constructor for the appropriate model, and then that model is handed to the grid partial view with the fresh page of data.
It works, and I never pass anything but the currently viewable page of data to the browser.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…