Alles over .NET, Sitecore en websites.

[Visual Studio 2008] TODO: comment

Door Luuk1983 op dinsdag 1 september 2009 10:38 - Reacties (13)
Categorie: Programmeren, Views: 4.156

Beste medetweakers,

Zo af en toe kom ik langs handigheidjes of truukjes die ik nog niet kende. En sommige daarvan zijn zo handig dat ik ze graag met jullie wil delen. Waarschijnlijk kennen de meeste van jullie dit soort truukjes al, maar voor die paar die het nog niet kende is het natuurlijk erg handig.

Deze keer gaat het over het 'todo' comment in Visual Studio 2008. Als je in Visual Studio 2008 (en volgens mij ook in Visual Studio 2005) commentaar met 'todo:' of 'TODO:' begint, dan komt dit commentaar terecht op je 'tasklist' onderaan.

Bijvoorbeeld:


C#:
1
//TODO: Replace this with the real data



Onderin staat de 'tasklist'. Als je deze opent krijg je al het commentaar dat met 'todo' begint te zien:

Screenshot van de tasklist is VS2008

Je kan op deze manier makkelijk bijhouden welke dingen er nog gegaan moeten worden. Als je dit consequent doet is het erg handig!

//EDIT: Meer info over de tasklist: http://msdn.microsoft.com/en-us/library/zce12xx2.aspx

Waarde van een ingevuld wachtwoordveld achterhalen.

Door Luuk1983 op maandag 20 april 2009 10:32 - Reacties (17)
Categorie: Programmeren, Views: 11.787

Vele kennen het vast wel: je hebt ooit je gebruikersnaam en wachtwoord voor dat ene forum of dat ene e-mail account wat je ooit even snel aangemaakt hebt ingevuld, en deze login gegevens door je browser laten onthouden of het vakje 'login gegevens onthouden' aangevinkt. Alleen nou weet je niet meer wat het betreffende wachtwoord is. Frustrerend is het wel: het wachtwoord staat al ingevuld, maar je kan deze uiteraard niet lezen.

Toch is het vrij makkelijk om de waarde van dit veld uit te lezen. Dit kan je doen met javascript. Ga naar een pagina met een (ingevuld) wachtwoordveld en kopieer en plak onderstaande code in de adreswerkbalk van je browser:


JavaScript:
1
javascript:(function(){var s,F,j,f,i; s = ""; F = document.forms; for(j=0; j<F.length; ++j) { f = F[j]; for (i=0; i<f.length; ++i) { if (f[i].type.toLowerCase() == "password") s += f[i].value + "\n"; } } if (s) alert("Passwords in forms on this page:\n\n" + s); else alert("There are no passwords in forms on this page.");})();

'Oude' stijl global.asax file in .NET 2.0

Door Luuk1983 op woensdag 1 april 2009 11:58 - Reacties (2)
Categorie: Programmeren, Views: 2.900

De global.asax file in .NET is klasse die je kan gebruiken voor globale functies en variabelen en het behandelen van applicatie gedrag, zoals het starten en stoppen van de applicatie, het starten van een sessie en alle fouten die nog niet afgevangen zijn eventueel alsnog af te vangen. Deze file bestond in .NET 1.1 en Visual Studio 2003 uit een global.asax en een global.asax.cs file, waarbij de global.asax file eigenlijk nutteloos was in zekere zin.

In .NET 2.0 heeft Microsoft waarschijnlijk ook bedacht dat het overbodig was om een global.asax en een global.asax.cs te hebben en in hun oneindige wijsheid hebben ze besloten om de global.asax.cs te laten vervallen en alleen de global.asax over te houden. Deze global.asax ziet er als volgt uit:


HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<%@ Application Language="C#" %>

<script runat="server">

    void Application_Start(object sender, EventArgs e) 
    {
        // Code that runs on application startup

    }
    
    void Application_End(object sender, EventArgs e) 
    {
        //  Code that runs on application shutdown

    }
        
    void Application_Error(object sender, EventArgs e) 
    { 
        // Code that runs when an unhandled error occurs

    }

    void Session_Start(object sender, EventArgs e) 
    {
        // Code that runs when a new session is started

    }

    void Session_End(object sender, EventArgs e) 
    {
        // Code that runs when a session ends. 
        // Note: The Session_End event is raised only when the sessionstate mode
        // is set to InProc in the Web.config file. If session mode is set to StateServer 
        // or SQLServer, the event is not raised.

    }
       
</script>


Zoals je ziet heeft Microsoft ervoor gekozen om een script tag met de code in de global.asax te plaatsen. Op zich werkt dit natuurlijk wel, maar het gaat tegen het hele principe in dat je je code juist in de .cs file wil hebben. Daarnaast heeft het plaatsen van deze code binnen een script tag beperkingen. Voor een paar simpele kleine dingen werkt deze opzet zonder problemen, maar bij uitgebreide functies is het niet handig. Zo kan je lang niet bij alle objecten binnen het project.

De oplossing is simpel: we 'herstellen' de functionaliteit. De code verplaatsen we naar een 'echte' klasse in een cs file.
  • Maak een nieuwe klasse aan binnen het project. De naam maakt op zich niet zoveel uit, maar het makkelijkste is om deze gewoon iets in de trant van 'Global' te noemen. Denk eraan dat in een Webproject de klasse in de App_Code folder moet staan.
  • Kopieer van de global.asax pagina alle code TUSSEN de <script> tags naar de nieuwe klasse.
  • Gooi de global.asax file nu helemaal leeg.
  • Voeg nu deze code toe aan de lege global.asax file:

    HTML:
    1
    
    <%@ Application Language="C#" Inherits="NaamVanDeNieuweKlasse" %>

  • Klaar! Je kan nu je nieuwe klasse gebruiken om code te schrijven. Je hoeft in principe niet meer in de global.asax file te zijn.
Zo zien de files er bijvoorbeeld uit na het wijzigen:

global.asax

HTML:
1
<%@ Application Language="C#" Inherits="Global" %>



Global.cs

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public class Global : System.Web.HttpApplication
{
    public Global()
    {
        //
        // TODO: Add constructor logic here
        //
    }

    void Application_Start(object sender, EventArgs e)
    {
        
    }

    void Application_End(object sender, EventArgs e)
    {
        //  Code that runs on application shutdown

    }

    void Application_Error(object sender, EventArgs e)
    {
        Exception ex = Context.Server.GetLastError();

        //Handle all custom exceptions
        if (ex.InnerException != null)
        {

        }
    }

    void Session_Start(object sender, EventArgs e)
    {
        FormsAuthentication.SignOut();
    }

    void Session_End(object sender, EventArgs e)
    {

    }
}



In Visual Studio 2008 is dit gelukkig allemaal weer terug gedraaid en is de global.asax weer hetzelfde als in Visual Studio 2003.

Voorkom Skype number highlighting

Door Luuk1983 op woensdag 1 april 2009 11:38 - Reacties (2)
Categorie: Programmeren, Views: 2.748

De skype plugin 'number highlighting' zorgt ervoor dat telefoonnummers op een website omgetoverd worden in klikbare links, waarbij de gebruiker door een klik op het nummer het betreffende telefoonnummer meteen in skype belt. Hoewel dit mooie functionaliteit is, is het ook mogelijk dat de layout van de pagina overhoop gehaald wordt of in sommige gevallen dat het telefoonnummer wegvalt. Zeker pagina's met veel dynamische elementen kunnen problemen krijgen.

We hebben zelfs wel eens gezien dat bij het opmaken van een nieuwsbrief in een webapplicatie dat skype tijdens het editen van de content een telefoonnummer vervangen had door Skype code, met als gevolg dat in de nieuwsbrief de skype code vast erin was komen te staan. Alle gebruikers kregen het betreffende telefoonnummer als skype nummer te zien.

Nou kan een gebruiker uiteraard de plugin in- of uitschakelen, maar als developer wil je soms de mogelijkheid hebben om ervoor te zorgen dat die hele skype plugin van je telefoonnummer afblijft. Daarom kan de volgende meta tag gebruikt worden:


HTML:
1
<META name="SKYPE_TOOLBAR" content="SKYPE_TOOLBAR_PARSER_COMPATIBLE" />