Order of events in the lifecycle of an ASP.Net page:

    Phase What a control needs to do Method or event to override
    Initialize Initialize settings needed during the lifetime of the incoming Web request. Init event (OnInit method)
    Load view state At the end of this phase, the ViewState property of a control is automatically populated as described in Maintaining State in a Control. A control can override the default implementation of the LoadViewState method to customize state restoration. LoadViewState method
    Process postback data Process incoming form data and update properties accordingly. LoadPostData method (if IPostBackDataHandler is implemented)
    Load Perform actions common to all requests, such as setting up a database query. At this point, server controls in the tree are created and initialized, the state is restored, and form controls reflect client-side data. Load event

    (OnLoad method)

    Send postback change notifications Raise change events in response to state changes between the current and previous postbacks. RaisePostDataChangedEvent method (if IPostBackDataHandler is implemented)
    Handle postback events Handle the client-side event that caused the postback and raise appropriate events on the server. RaisePostBackEvent method(if IPostBackEventHandler is implemented)
    Prerender Perform any updates before the output is rendered. Any changes made to the state of the control in the prerender phase can be saved, while changes made in the rendering phase are lost. PreRender event
    (OnPreRender method)
    Save state The ViewState property of a control is automatically persisted to a string object after this stage. This string object is sent to the client and back as a hidden variable. For improving efficiency, a control can override the SaveViewState method to modify the ViewState property. SaveViewState method
    Render Generate output to be rendered to the client. Render method
    Dispose Perform any final cleanup before the control is torn down. References to expensive resources such as database connections must be released in this phase. Dispose method
    Unload Perform any final cleanup before the control is torn down. Control authors generally perform cleanup in Dispose and do not handle this event. UnLoad event (On UnLoad method)
  1. Note   To override an EventName event, override the OnEventName method (and call base. OnEventName).
  2. SnowCovered.com is the largest distributor of commercial third-party modules for DotNetNuke. If you are a DNN module developer and want to sell your product, this is the place to post it for sale. If you are a DNN end-user looking to buy a module, this is the place to buy it.

    In recent months, more and more users post on the DNN forums complaining about some of the junk people pass off as modules on SnowCovered. As a result, there is a growing negative perception about the site. As a developer of commercial modules and also an end-user, I have many SnowCovered transactions and have a fairly strong opinion on the matter.

    I would like to start by addressing the issue of module quality. This is simply not the responsibility of a distributor, especially when the terms are clearly spelled out for the buyer. Nor is it the responsibility of the distributor to judge what is good and what is crap. Do you go down to your local Wal-Mart and complain that they have crappy products along with good ones? Of course not, you just avoid the products that don’t meet your expectations. Why is this any different? Quite frankly, if you buy a module on SnowCovered without performing due diligence on the publisher, you’re an idiot because you failed to follow the most fundamental tenet of commerce — Caveat emptor!

    Buying a module? Note the following:

    1) Visit the publisher’s website prior to purchase. Is there a support page? Is there is an online forum with recent activity. Are there working product demos available? These are such basic things to look for pre-purchase, but unfortunately, people only do them post-purchase. If someone is selling a product and cannot fork over the $50 it takes to maintain a good website with working demos, you can conclude that they are opportunistic and not really in the software publishing business. Move on…

    2) Do a cursory search on the net on the publisher’s name prior to purchase. Even if the publisher’s site is great, if Google is drawing a blank, chances are the publisher is not well-established. You can overlook this only if there are other means by which you can verify the publisher’s credibility.

    3) DNN modules are dirt cheap. Spend the extra bucks for the source code. Then it won’t matter if the developer doesn’t publish an update for the latest version of DNN. Sure, it’s work for you if this happens and costs you a little more up front, but at least you are not stranded.

    4) No one is going to give you a refund on software. This is a fact of life. Try opening a piece of software and returning it at Best Buy. Fat chance. This is no different.

    The next issue I would like to address is the 25% commission. Any post where a developer is whining about this indicates that the developer is generally clueless about the market. Any distributor will charge you a commission of 18–30% for selling your software. If you don’t like this, then sell it yourself. But be prepared to have fairly low sales unless you are willing to put up some marketing dollars. All publishers benefit as a result of the aggregation on a distributor site. If you are not quite well-versed in the business of retail, you will whine about “SnowCovered taking your money.” This is plain and simple, a marketing fee. It is an industry-standard and for any sensible developer, a wise investment.

    I launched a store for on my site in November 2004. I decided that Speerio has enough brand recognition and credibility that customers will not have a problem making a purchase directly on my site without a third-party. I was right. Over 85% of my sales now come from customers purchasing directly from the Speerio Online Store. However, I still want to capture business from new DNN users, so I will always continue to have a presence on SnowCovered and Xtras. It is a pain to manage upgrades etc. but in time, these systems will evolve.

    One last comment on the issue of commission. The commission does not affect the buyer in any way, i.e. it is not an increased fee levied by the distributor. SnowCovered is actually using incorrect parlance. The industry standard term is “discount.” The publisher discounts their product by 25% so when SnowCovered sells at the MSRP, it gets to keep the difference. The buyer pays the MSRP in most cases unless the distributor has a promotion and gives up part of the discount by selling lower than MSRP.

    Now, let’s talk about the SnowCovered Help Desk and FAQ system. Although I think Brice has done a great job of creating a market that was completely non-existent, on this topic, I must ask “What the heck are you thinking?” This is the most insane, dumb and generally speaking, lousy business decision I have seen made in some time. By extending its role from distributor to support provider, SnowCovered is setting itself up to fail in meeting customer expectations. The software for managing help requests and FAQs is a shade above really, really crappy. Every serious developer I know that sells on SnowCovered HATES it with a passion. It is a pain to use and a pain to support. I got so fed-up with it, I put a standard disclaimer on all my new SnowCovered posts…pre– and post-sales questions at SnowCovered will be ignored. Email me directly or visit the Speerio site and post on the forums. It has worked quite well, although there will be the occasional customer who will continue posting there. I wish the SnowCovered help desk and FAQ system would go away.

    Now, I hope this post doesn’t give the impression that I really like SnowCovered and am OK with the fact that there is complete crap being passed off as DNN modules on there. I don’t. I hate it, especially because I put in a lot of effort into creating quality products and I hate being shelved with sub-standard products. But this is how a market economy works. Ultimately, the market decides on what is good and what isn’t. If I want the benefit of the visibility SnowCovered has, I have to publish my products on their site. Thankfully, with few exceptions, customers are smart and can tell the difference. So, for the moment, I can live with this.

    Dharmesh Shah asks:

    I’m exploring the use of third-party controls (like Infragistics, ComponentArt, etc.) within my custom modules. My first round of experimentation with Infragistics seems to indicate a problem because of some of the Javascript and other stuff the control tries to insert. Do you have any tips or experience in using these types of controls inside a DNN module?

    Nik’s response:

    This is an issue that is going to plague DNN developers for some time to come. To understand why, let’s examine how components use Javascript.

    Generally speaking, a third-party component will inject JS into your page in one of two ways: (1) by having a