2010-12-09 5 views
4

In ASP.NET MVC 2, können Sie diese URL und diese Controller-Methode verwenden:Kann ich in ASP.NET MVC 2 einen Querystring in ein Array unter Verwendung des standardmäßigen ModelBinders deserialisieren?

GET http://server/controller/get?id=5 

public ActionResult Get(int id) 
{ 
    ... 
} 

Und der Modelbinder wird die id=5 Abfragezeichenfolgeflag zu id = (int) 5 in dem Methodenparameter konvertieren. Allerdings wird dies nicht funktionieren:

GET http://server/controller/get?idlist=1,2,3,4,5 

public ActionResult Get(int[] idlist) 
{ 
    ... 
} 

idlist wird im Parameter null sein. Obwohl das Parsen dafür ziemlich trivial ist, habe ich mich gefragt, ob es eine Möglichkeit gibt, entweder die Methodensignatur oder die Querystring zu ändern, damit der Standard-ModelBinder Arrays/Sammlungen automatisch deserialisiert.

Antwort

8

Mit dem Standard-Modelbinder, sollte die URL

http://server/controller/get?idlist=1&idlist=2&idlist=3&idlist=4&idlist=5 

oder

http://server/controller/get?idlist[]=1&idlist[]=2&idlist[]=3&idlist[]=4&idlist[]=5 

sein, wenn Sie verwenden möchten idlist = 1,2,3,4,5 sollte wirklich, Sie haben Ihre eigener Bindemittel

+1

Aua, ich werde nur halten Sie sich an 'idlist.Split ('') .Wählen Sie (x => Convert.ToInt32 (x)); '. –

+2

Der Standardmodellbinder unterstützt das zweite Beispiel nicht. – MartinF

-4

Hier ist, was ich denke:

public ActionResult Get(int id) 
{ 
    ... 
} 

Sollte als

GET http://server/controller/get/5 

Und der idlist einfach (,) aufgeteilt werden kann Dies ist ein wenig spät, um die Partei

+0

Wie wird Ihre Integer-ID eine durch Kommata getrennte Liste enthalten? – andynormancx

+0

Warum erleichtern Sie es nicht einfach, indem Sie eine String-Liste übergeben. Ich denke, es sollte wirklich einfach sein, das zu tun. Habe ich recht? –

+1

Das beantwortet meine Frage nicht einmal im Entferntesten. –

-1

durch Komma verwendet werden, aber ich wollte genau das Gleiche tun.

Sie können die einzelnen String als {1,2} passieren und es das Bindemittel wird es bindet an ein Array zB

<input name="idlist" type="text" value="{163,162}">