[asp.net] MVC3 routing/binding WTF

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Korben
  • Registratie: Januari 2001
  • Laatst online: 22-01-2024

Korben

() => {};

Topicstarter
Ik vraag me ernstig af of ik nou ergens overheen kijk, of dat ik iets probeer wat niet kan.

Ik wil een simpele lijst met paginering maken.

Routering aangemaakt:
C#:
1
routes.MapRoute("PosterManagementIndex", "PosterManagement", new { controller = "PosterManagement", action = "Index", page = 1 });


Vervolgens een action op een controller:
C#:
1
2
3
4
public ActionResult Index(int page)
{
   // code...
}


Als ik nu /PosterManagement bezoek, dan is page 1. Als ik nou /PosterManagement?page=2 bezoek, dan is page nog steeds 1? Nu kan ik dit wel oplossen door van page een int? te maken, maar dan raak ik kwijt dat de URL van pagina 1 automatisch /PosterManagement is zonder overal checks in te bouwen. What gives?

Ik kan overigens niet echt Googlen naar dit probleem; als ik Google naar 'mvc3 routing default value' krijg je 5 miljoen pagina's van Indiërs die trots laten zien hoe ze hun eerste route hebben aangemaakt, gevolgd door een miljoen vragen op Stack Overflow met de vraag 'hoe moet dit'.
[/vent]

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 28-02 01:01
C#:
1
routes.MapRoute("PosterManagementIndex", "PosterManagement", new { controller = "PosterManagement", action = "Index", page = OptionalParameter });


C#:
1
2
3
4
public ActionResult Index(int page = 1)
{
   // code...
}

Dit dus ;)

Waarbij je Optionalparameter (moet je even zoeken wat de precieze term is) zelfs kan weglaten omdat deze niet terugkomt in je route.

[ Voor 20% gewijzigd door Megamind op 02-07-2012 16:25 ]


Acties:
  • 0 Henk 'm!

  • Korben
  • Registratie: Januari 2001
  • Laatst online: 22-01-2024

Korben

() => {};

Topicstarter
Ah je bedoelt wellicht UrlParameter.Optional? Interessant. Nu wordt het leuk, want hoe doe je dat als je action alleen een model als parameter heeft? Default waarde zetten in de constructor van je model?

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 28-02 01:01
UrlParameter.Optional bedoelde ik inderdaad. Die gebruik je eigenlijk alleen hiervoor:

C#:
1
routes.MapRoute("PosterManagementIndex", "PosterManagement/{Page}", new { controller = "PosterManagement", action = "Index", page = UrlParameter.Optional});


Als je dan geen pagina meegeeft dan wordt deze automatisch 1 (omdat deze in je Action staat als default parameter), en wordt de URL: http://www.t.net/PosterManagement/

Geef je wel een pagina mee dan wordt deze uiteraard gewoon gevuld in de action, maar dan blijft je URL ook netjes:
http://www.t.net/PosterManagement/2/

Als je UrlParameter.Optional weg zou laten, dan zou je ook geen {Page} in je route kunnen zetten want anders kan je deze niet aanroepen zonder een pagina verplicht mee te geven, en krijg je deze URL:

http://www.t.net/PosterManagement?Page=2

Acties:
  • 0 Henk 'm!

  • Korben
  • Registratie: Januari 2001
  • Laatst online: 22-01-2024

Korben

() => {};

Topicstarter
Juist, gevalletje klok, klepel. Ik dank u vriendelijk. :)

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?