I think the code in that article (the one that uses row_number) has one problem. What if:
User A retrieves first page (rows 1-25 in name order)
User B deletes one or more rows that user A retrieved
User A requests next page (she thinks she is getting 26-50 in name order, and she does, but now some names are shifted to page 1 due to deletion and she missed them)
The other code here that uses persisted identity column is better IMHO.