2009-04-20 7 views
10

Il y a des tonnes d'exemples pour la liaison de modèles dans les formes html, mais je me demande s'il est possible, et si oui, comment, utiliser la liaison de modèle pour les demandes ActionLinks/GET.Liaison de modèle et demandes GET?

Ainsi, étant donné le modèle suivant

public class Lurl 
{ 
    public string Str {get;set;} 
    public char Chr {get;set;} 
    public double Dbl {get;set;} 
} 

et l'itinéraire suivant (je ne sais pas comment cela serait formé, je vous présente pour montrer comment je voudrais l'URL présente les propriétés Str, Chr et Dbl)

routes.MapRoute(
    "LurlRoute", 
    "Main/Index/{str}/{chr}/{dbl}", 
    new 
    { 
     controller = "Main", 
     action = "Index", 
     lurl = (Lurl)null 
    } 
); 

Je voudrais l'utiliser de cette façon dans mon contrôleur

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult Index(Lurl lurl) 
{ 
    /* snip */ 
} 

une d de cette façon dans ma page (deux options possibles; y at-il plus?)

<div class="links"> 
    <%Html.ActionLink("Link one", "Index", new { lurl = Model })%><br /> 
    <%Html.ActionLink("Link two", "Index", 
     new { str = Model.Str, chr = Model.Chr, dbl = Model.Dbl })%> 
</div> 

Est-ce possible avec l'infrastructure de liaison de modèle? Et si oui, que faut-il faire pour mes échantillons pour les faire fonctionner?

Répondre

5

Je pense que vous aurez à choisir soit la classe comme une approche des paramètres

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult Index(Lurl lurl) 
{ 
    /* snip */ 
} 

ou les propriétés en tant que paramètres approchent

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult Index(string str, char chr, double dbl) 
{ 
    /* snip */ 
} 

... mais dans la classe comme une approche de paramètre , vous pouvez utiliser la méthode "UpdateModel". Vous pouvez transmettre une liste blanche de paramètres que vous souhaitez mettre à jour avec cette méthode au cas où vous ne souhaiteriez mettre à jour que quelques valeurs dans votre modèle.

En outre, dans votre MapRoute, quel paramètre sera mappé dans votre chemin d'accès? Je suis sûr qu'il doit y avoir une corrélation un à un là-bas.

3

Vous pouvez également utiliser un custom model binder. Lire également this.

+0

Egalement +1 pour une bonne question! –

Questions connexes