Solved

Using OnAppStart to determine the site's frosting

Posted on 2011-09-08
3
307 Views
Last Modified: 2012-05-12
Nutshell:
How (or if) to use the Global.asa as a way to clone a series of sites with a common code base but varying front-end elements.

Bigger Picture:
I have a donut shop and have found that if I deploy a series of websites - one for each of the donut types I manufacture (myGlazedDonut.com; mySprinkledDonut.com; myPlainDonut.com, and so on) - I'm better able to serve the interests of my customers than if I host one central 'DonutsRUs.com' domain. (taken, darnit).

I'm thinking the best code reuse will be one backend tier that drives multiple websites, one per frosting option. So I'd like to code a webapp that understands which frosting facade to present based on which domain it's running within.

So if the app wakes up to find it's running in the 'myFrostedDonut.com' domain it knows to display 'sales@myFrostedDonut.com' for the email address, it knows which .jpgs to use for Banners and Footers, it knows which google-analytics code to use. It even knows that on the 'Contact Us' the reader will see: Hi, from your loyal friends at Plain Donuts. Did you know that plain donuts are much better for you than those fattening things found at places like myFrostedDonuts.com.

Point is there are a lot of different 'search/replace' types of operations taking place in code. Usually I've used the web.config to store global variables but the above scenario is more complex than just a database connection string - there are a lot of exception conditions to account for, not every property has a one-to-one relation to each other domain.

I'm thinking I want to add logic at the Global.asa but need to see some examples of how others have approached similar problems.

thx
0
Comment
Question by:juststeve
  • 2
3 Comments
 
LVL 18

Expert Comment

by:ivan_vagunin
ID: 36512355
Hi! There are many ways to accomplish what you want, first I would advise to keep reusable in a separate library.
Then, you can make different site look using different master pages or css classes while using the same code, the other option is to use variation controls (controls, that renders different content based on some condition).
If you prefer variation controls, then you can place mode param in web.config or Appliction param collection - these are most suitable places because they are available across all application. If you prefer not to use web.config, then you can init Application param in global.asax, based on current url, like this:

protected void Application_Start(object sender, EventArgs e)
{
    if(string.Compare(HttpContext.Current.Request.Url.Host, "myFrostedDonut.com", true) == 0)
   {
       HttpContext.Current.Application["SiteMode"]  = "Frosted";
   }
}

Then in your code you can read it like:
string mode = Application["SiteMode"] as string;
0
 

Author Comment

by:juststeve
ID: 36523898
I'm not clear on the difference between web.config-based vs your reference to variation controls. How is something created in global.asax less available than web.config?

thx
0
 
LVL 18

Accepted Solution

by:
ivan_vagunin earned 500 total points
ID: 36524390
The web.config-based solution is not vs. variation controls. Instead, the variations can be implemented using web.config based parameters. Parameters declared in web.config and parameters in HttpContext.Application collection have the same scope - they are available at application scope. The difference is in the way you can read and modify the parameters. If you use HttpContext.Application you can set parameters programmatically only, if you use web.config then you can set parameters by editing web.config.
0

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

IntroductionWhile developing web applications, a single page might contain many regions and each region might contain many number of controls with the capability to perform  postback. Many times you might need to perform some action on an ASP.NET po…
If you are a web developer, you would be aware of the <iframe> tag in HTML. The <iframe> stands for inline frame and is used to embed another document within the current HTML document. The embedded document could be even another website.
This is used to tweak the memory usage for your computer, it is used for servers more so than workstations but just be careful editing registry settings as it may cause irreversible results. I hold no responsibility for anything you do to the regist…
Internet Business Fax to Email Made Easy - With  eFax Corporate (http://www.enterprise.efax.com), you'll receive a dedicated online fax number, which is used the same way as a typical analog fax number. You'll receive secure faxes in your email, f…

861 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

25 Experts available now in Live!

Get 1:1 Help Now