2009-04-20 14 views
10

Ci sono un sacco di esempi per il binding del modello nei moduli html, ma mi chiedo se è possibile e, in caso affermativo, utilizzare l'associazione modello per le richieste ActionLinks/GET.Obbligazione modello e richieste GET?

Quindi, dato il seguente modello

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

e il seguente percorso (non sono sicuro di come questo possa essere formato, mi presento per mostrare come mi piacerebbe l'URL presenta le proprietà Str, Chr e Dbl)

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

vorrei usarlo in questo modo nel mio controller

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

un d in questo modo nella mia pagina (due possibili opzioni; ce ne sono altri?)

<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> 

Ciò è possibile con l'infrastruttura di rilegatura del modello? E se sì, cosa deve essere fatto ai miei campioni per farli funzionare?

risposta

5

penso che dovrete scegliere sia la classe come parametro di un approccio

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

o le proprietà come parametri si avvicinano

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

... anche se nella classe come parametro di approccio , puoi usare il metodo "UpdateModel". Puoi passare una whitelist di parametri che vuoi aggiornare con quel metodo solo nel caso in cui desideri aggiornare solo alcuni valori nel tuo modello.

Inoltre, nel tuo MapRoute, quale parametro si accosterà nel percorso? Sono abbastanza sicuro che ci debba essere una correlazione uno a uno lì.

3

È inoltre possibile utilizzare un custom model binder. Leggi anche this.

+0

Anche +1 per una bella domanda! –

Problemi correlati