Zoekscherm dat dynamisch queries maakt met Expression Trees en MVC

Door creator1988 op woensdag 23 februari 2011 14:39 - Reacties (5)
Categorie: Frontend, Views: 3.180

Naar aanleiding van de reactie van Jogai in Coding Glamour: Route constraints op QueryString parameters in ASP.NET MVC, een post over het mappen van een MVC zoekformulier naar een echte SQL query.

Let's get it started
Met behulp van het volgende model wordt een view getoond met daarop een formulier:

C#:
1
2
3
4
5
6
7
8
9
// model
public class ZoekformulierModel {
    public string Plaatsnaam { getset; }
    public int PrijsVan { getset; }
    public int PrijsTot { getset; }
    public bool IndTuin { getset; }
    
    /* wat code voor de opties in de selectlist */
}


HTML:
1
2
3
4
5
6
7
8
9
10
11
<!-- view -->
<form method="post" action="">
<h1>Zoekformulier</h1>
<table>
    <tr><th>Plaats</th><td><%=Html.TextBoxFor(m=>m.Plaatsnaam) %></td></tr>
    <tr><th>Prijs</th>
        <td><%=Html.DropDownListFor(m=>m.PrijsVan, Model.PrijsRange) %> - <%=Html.DropDownListFor(m=>m.PrijsTot, Model.PrijsRange) %></td></tr>
    <tr><th>Tuin?</th><td><%=Html.CheckBoxFor(m=>m.IndTuin) %></td></tr>
</table>
<input type="submit" value="Zoeken" />
</form>

http://www.100procentjan.nl/tweakers/zoek1.png

Lees verder »

Route constraints op QueryString parameters in ASP.NET MVC

Door creator1988 op maandag 21 februari 2011 14:11 - Reacties (1)
Categorie: Frontend, Views: 3.128

ASP.NET MVC kent een vrij krachtige routing-engine om URL's te routen naar de actie die daarbij hoort. Naast puur URL's mappen kan je tevens constraints toevoegen om je routings wat te finetunen. Bijvoorbeeld praktisch voor de volgende situatie:

code:
1
2
3
4
5
/koop/amsterdam/appartement-12345-straat-1/fotos/
-> moet naar ObjectController.Detail

/koop/amsterdam/appartement-12345-straat-1/reageer/
-> moet naar ObjectController.Contact

Door een constraint toe te voegen, kan je onderscheid maken tussen deze twee URL's:

C#:
1
2
3
4
5
6
7
8
// bijvoorbeeld
routes.MapRoute(
    "object-contact",
    "{aanbod}/{plaats}/{type}-{id}-{adres}/{pagina}",
    /* ... */,
    new { pagina = @"reageer|bezichtiging" });

// als pagina iets anders is dan reageer / bezichtiging matcht de route niet

Probleem: wanneer je URL's van binnen als volgt zijn (omdat ASP.NET voor elke URL in je website opslaat of er een fysieke file voor is, en bij miljoenen unieke URL's is dat een huge leak dat niet automatisch wordt geflusht):

code:
1
/koop/?id=12345&pagina=reageer

zijn constraints niet meer mogelijk, want dit wordt niet ondersteunt op QueryString parameters. Daarom: de QueryStringConstraint!

Lees verder »

Mobile device detection

Door creator1988 op vrijdag 18 februari 2011 14:18 - Reacties (7)
Categorie: Frontend, Views: 3.503

Belangrijk onderdeel van ons nieuwe mobiele platform is uitvogelen welk device een gebruiker op dat moment gebruikt. Ben je mobiel met een viewport-breedte van < 600 px dan willen we je doorsturen naar onze mobiele site. En dan kom je terecht in de wondere wereld van User Agent parsing.

Lees verder »

Bouw eens een API met WCF, deel 4: Beschikbaar via SOAP, XML en JSON

Door creator1988 op woensdag 16 februari 2011 14:30 - Reacties (3)
Categorie: -, Views: 4.468

Een API is geen API als er niet via verschillende protocollen tegenaan gepraat kan worden; iets wat in WCF volledig in config geregeld kan worden. In Visual Studio 2008 nog iets wat haast automatisch handwerk werd: de Configuration Editor was niet alleen alles behalve intuitief, maar genereerde ook nogal eens niet werkende configs. 2010 heeft daar echter verbeteringen in aangebracht, waardoor het configureren voor meerdere endpoints een breeze is.

Lees verder »

Waarom Javascript zo awesome is

Door creator1988 op maandag 14 februari 2011 14:03 - Reacties (12)
Categorie: Frontend, Views: 3.827


JavaScript:
1
2
3
($=[$=[]][(__=!$+$)[_=-~-~-~$]+({}+$)[_/_]+
($$=($_=!''+$)[_/_]+$_[+$])])()[__[_/_]+__
[_+~$]+$_[_]+$$](_/_)

Via ADAMCECC

Niet alleen awesome, want welke andere taal is zo flexibel met haar language-constructs? Tevens weer een quick reminder dat user input nooit te vertrouwen is. Wanneer je geÔnteresseerd bent in beveiliging tegen dit soort aanvallen, kijk dan eens naar dit paper van Ryan Barnett: XSS Street Fight.