35 messaggi dal 31 marzo 2010
Ciao a tutti, vorrei sfruttare i friendly url nella mia applicazione asp.net mvc4. Per fare cioè ho definito una nuova route in modo che all'invocazione di un determinato url, ad esempio
www.test.com/store/category1/product1 venga invocato una determinata action del controller.
I due parametri category1 e product1, fanno riferimento a due ID che devo ricavarmi dal database. Quello che chiedo è c'è un modo per far si che il mio metodo sul controller accetti due interi "categoryId" e "productId" e ci sia un meccanismo interno che al matching della route scatti un metodo che estragga dai due valori "testuali" gli ID e li passi al metodo del controller?
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,


il mio metodo sul controller accetti due interi "categoryId" e "productId"

Sì, lascia che i due parametri siano interi e poi decorali con l'attributo [ModelBinder(...)] come vedi fare qui:
http://blog.maartenballiauw.be/post/2008/09/01/Using-the-ASPNET-MVC-ModelBinder-attribute.aspx

Dovrai crearti una classe che implementi IModelBinder che sia in grado di "tradurre" ognuna delle due stringhe in ID. Anzi, fai due classi, una per i prodotti e una per le categorie.

Nell'esempio che ti ho postato, le stringhe vengono lette dal form ma tu dovrai recuperarle dai dati della route. Esempio:
var categoryName = controllerContext.RouteData.Values["category"];
var productName = controllerContext.RouteData.Values["product"];
Dopodiché dovrai andare a cercare l'id corrispondente nel database. Magari tieni una cache in memoria per evitare che si debba aprire una connessione al database solo per questo scopo.

ciao,
Moreno

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.