65.9K
CodeProject is changing. Read more.
Home

Clean ASP.NET page initialization

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0 vote)

Jul 11, 2011

CPOL
viewsIcon

15920

Initialize Master Page, Page, and Controls in a single JavaScript call.

Here is a clean way to initialize all the JavaScript in your ASP.NET page. It is accomplished using a custom initializer class. This example uses jQuery.

In the master page itself or in a .js class referenced in your master page, declare your class:

//Initializer class
function Initializer() {
    //A simple array of functions
    this.functionArray = new Array();
}

//The method to insert functions to the initialization stack
Initializer.prototype.addStep = function (func) {
    this.functionArray.push(func);
}

//The initializing method
Initializer.prototype.init = function () {
    for (x in this.functionArray) {
        this.functionArray[x]();
    }
}

The init() method loops through the function array and executes each method.

Add this block to the master page:

<script type='text/javascript'>
    //Create instance of the initializer
    var initializer = new Initializer();

    //JQuery's 'onready' function
    $(document).ready(function () {
        initializer.init();
    });
</script>

In your user controls and/or pages, add your initialization code:

//Method called by Page_Load
private void CreateInitScript()
{
    string script = "function doSomething() {
       //Perform some actions
    }";

    ClientScriptManager cs = Page.ClientScript;

    //Insert your script into the page
    cs.RegisterClientScriptBlock(this.GetType(), "MyScript", script, true);


    //Add a call to your method to the validation stack
    string validationScript = "if(initializer){ initializer.addStep(doSomething); }";

    cs.RegisterStartupScript(this.GetType(), "initscript", validationScript, true);
}

This code is very handy when you want to handle your control's initialization at the same time as the hosting page and the master page if you use one.