Apr 05
2010

Registering a javascript for an aspx page is possible in many ways.
Here is an example to add an eventhandler for an asp.net control using ASP.NET AJAX client life-cycle events.

  • First on the bottom of our javascript code in aspx we have to add handler functions for the load and unload event. The event handlers itself contains the needed js functions:

    Sys.Application.add_load(jsFunction_pageLoad);
    Sys.Application.add_unload(jsFunction_pageUnload);

  • The next step is to add a click handler to our asp.net control, in this case to a radiobutton. Javascript finds the control by getting the controls ClientID. To complete this way the handler will removed when page will be unloaded:

    function jsFunction_pageLoad(source, args)
    {
        if (!args.get_isPartialLoad())
        {
            $addHandler($get('<%= rbtnTest.ClientID %>'),
'click', rbtnTest_click);
         }
    }

    function jsFunction_pageUnload(source, args)
    {
        $removeHandler($get('<%= rbtnTest.ClientID %>'),
'click', rbtnTest_click);
    }

  •  Now we can write the real js function which will execute something when the radiobutton is clicked:

    function rbtnTest_click(evt)
    {
        alert('hello world');
    }

 

Here the complete code:

<script type="text/javascript">
//<![CDATA[

    function jsFunction_pageLoad(source, args)
    {
        if (!args.get_isPartialLoad())
        {
            $addHandler($get('<%= rbtnTest.ClientID %>'), 'click', rbtnTest_click);
         }
    }

    function jsFunction_pageUnload(source, args)
    {
        $removeHandler($get('<%= rbtnTest.ClientID %>'), 'click', rbtnTest_click);
    }

    //event when rbtnTest is clicked
    function rbtnTest_click(evt)
    {
        alert('hello world');
    }


 Sys.Application.add_load(jsFunction_pageLoad);
 Sys.Application.add_unload(jsFunction_pageUnload);

//]]>
</script>

More informations about AJAX client events you can get here.

Tags: Tags:
Nov 30
2007

Das brandneue Visual Studio 2008 von Microsoft bietet dem bisher leidgeplagten JavaScript - Entwickler einige hervorragende Neuerungen. Diese betreffen in erster Linie das Intellisense für diese Skriptsprache.

  • Allgemeines Intellisense für Javascript in der VS2008 IDE
  • Zusätzlich Intellisense für Microsoft Javascript Extensions (z.B. für ASP.NET Ajax, sobald der ScriptManager auf einer Seite eingebunden ist)
  • Das Intellisense gilt auch für includete .js files (bzw. für die dort enthaltenen Funktionen)
  • Ein Highlight stellt meines Erachtens die neue XML strukturierte und casesensitive Kommentarsyntax dar, wie man sie z.B. von C# her kennt.
    Das kann z.B. so aussehen:
        function alertDayAndDate(day,date)
       {
            ///<sumary>Function that alerts day and date</sumary>
            ///<param name="day" type="string">The day as string</param>
            ///<param name="date" type="string">The date as string formatted 19.04.2008</param>
   
            var strDay = day;
            var strDate = date;
   
            alert('Tag: '+strDay+ ' Datum: '+strDate);
        }
 
 


Auch beim JavaScript-Debugging gibt es Neuerungen. Das ist jedoch ein Beitrag für sich.
Tags: Tags: |
Nov 15
2007

Im Zusammenhang mit dem Einbinden des Virtual Earth Map Control 6.0 in eine Testseite bin ich über ein kleines, aber feines Problem gestolpert.
Von meiner Testseite aus, die von der Masterpage abgeleitet ist und folglich keinen eigenen Body hat, muss ich auf den Body meiner Masterpage zugreifen und dort per onload ein JavaScript aufrufen. Über den nachfolgend geschilderten Weg ist das ohne Probleme möglich.

Einzufügen im codeBehind meiner Testseite:

private HtmlGenericControl myBody;
protected void Page_Load(object sender, EventArgs e)
{
  myBody = (HtmlGenericControl)Page.Master.FindControl("MyBody");
  if (myBody.Attributes["onload"] != null)
    myBody.Attributes["onload"] += "GetMap();";
  else
    myBody.Attributes.Add("onload", "GetMap();");
}

Es wird über FindControl und über die ID der Body ermittelt. Falls dieser schon ein Onload-Attribut besitzt, wird die JavaScript-Funktion GetMap() an bestehende Skripten angefügt. Ansonsten wird es als alleiniges Skript angefügt.

Allerdings konnte es so auf Anhieb nicht funktionieren. Es erschien folgende Fehlermeldung:

Ausnahmedetails: System.NullReferenceException: Object reference not set to an instance of an object.

Warum? Der Body konnte aus einem einfachen Grund nicht ermittelt werden.

Das "runat=server" fehlt in meinem Body-Tag.
Mit <body id="MyBody" runat="server"> funktionierte der Mechanismus.

Tags: Tags: | |