Yes this will work although if you are loading your page with user controls and doing AJAX request there are a couple things that need to be done. First I am using .Net 2.0 althought I pretty sure it will in higher versions.
This is a little complicated but what I have done is this:
I have all the information for the site pages in a database and I have one page "default.aspx" that renders almost all pages in my sites.
I use a custom navagation control but you could use the tab strip such is used in the demo at:
Using this I would set the tab NavigateUrl property to go to your pages such as home.aspx, products.aspx, etc.
I then intercept the request on the Application_BeginRequest function in the global.asax.
Here I strip out the page name( which needs to be unique) such as Home, Products, Admin, etc.
I then use this as a parameter to query the database for the page ID.
This will return default.aspx?id=1, default.aspx?id=2, etc.
protected void Application_BeginRequest(Object sender, EventArgs e)
HttpContext incoming = HttpContext.Current;
string oldpath = incoming.Request.Path.ToLower();
string strPageTitle = (incoming.Request.Path.ToLower().Substring(incoming.Request.Path.ToLower().LastIndexOf("/") + 1)).Replace(".aspx", "");
string pattern = @"[^a-zA-Z]";
string newStr = Regex.Replace(strPageTitle, pattern, "");
NavLogic nl = new NavLogic();
string strPageUrl = nl.QryGetPageUrl(strPageTitle);
//SP result will will be like "default.aspx?id=9" or 0 for not found
if (strPageUrl == "0")
I then catch the Request["id"] in the Page_Load and use this to build the page. I Initially load user controls in the page load and for postbacks I reload them in the OnPreInit.
There are issues with AJAX requests and URL Rewiting. There are different ways to handle this but I use a custom form such is described in the link below.
Hope this helps,