235 messaggi dal 27 aprile 2009
Ciao a tutti da qualche giorno sto avendo un discussione con MVC per ora lui risulta essere più furbo di me,ma la battaglia è ancora lunga.

Oggi mi sono imbattuto nel routes.MapRoute.
Allora io questo codice

  routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Home", id = UrlParameter.Optional} // Parameter defaults
            );

            routes.MapRoute(
               "Gallery", // Route name
               "Gallery/{action}/{id}/{page}", // URL with parameters
               new { controller = "Gallery", action = "Index", id = 1, page = 1 } // Parameter defaults
           );

            routes.MapRoute(
            "Admin", // Route name
            "Admin/{action}/{id}/{type}", // URL with parameters
            new { controller = "Admin", action = "HomeAdmin", id = UrlParameter.Optional, type = UrlParameter.Optional } // Parameter defaults
        );




da Quello che ho capito se in una pagina ho questo indirizzo
http://localhost:55607/Controller/Action/1/1
lui va dentro alla Routes
             routes.MapRoute(
               "Gallery", // Route name
               "Gallery/{action}/{id}/{page}", // URL with parameters
               new { controller = "Gallery", action = "Index", id = 1, page = 1 } // Parameter defaults
           );


e questo ve lo dico perchè provato e funzionante.

Ora se sono dentro a

http://localhost:55607/Admin/Action/1/salva
Mi aspetto che vada dentro a

    routes.MapRoute(
            "Admin", // Route name
            "Admin/{action}/{id}/{type}", // URL with parameters
            new { action = "HomeAdmin", id = UrlParameter.Optional, type = "salva" } // Parameter defaults
        );


Da codice recupero i parametri
[HttpPost]
public ActionResult HomeAdmin(int id, string type)
{
}

ma il valore type mi risulta == null.
perchè?
Grazie a tutti x l'aiuto
Ciao
Modificato da Stefano_VR il 02 dicembre 2011 10.07 -
5.610 messaggi dal 09 febbraio 2002
Contributi
Stefano_VR ha scritto:

ma il valore type mi risulta == null.
perchè?


Ciao, si verifica perché il motore di routing di MVC non è riuscito a trovare alcun valore da assegnare al parametro 'type'.

La prima fonte che controlla è l'URL, cioè cerca di capire se è stato fornito un valore per il frammento {type} che hai definito nella route "Admin" e, in caso lo trovasse, impiega quello.

Ora, la situazione è strana perché, se come è vero, fai un post a "http://localhost:55607/Admin/Action/1/salva", allora il frammento {type} vale "salva" e non si spiega come mai il parametro 'type' della tua action invece valga null. (A proposito, il nome della action che vedo in quell'url è "Action" ma dovrebbe essere "HomeAdmin"). C'è qualcosa che non torna...
  • Assicurati di non aver definito altre routes che usano lo stesso controller "Admin" e in cui non è presente il frammento {type}
  • Assicurati che il post avvenga effettivamente a /Admin/HomeAdmin/1/salva. Il tuo metodo Html.BeginForm con il quale generi un form nella view dovrebbe essere tipo questo:
    Html.BeginForm(new {controller="Admin", action="HomeAdmin", id=1, type="salva"})
    
  • Per curiosità controlla che nel form non ci siano dei campi input che abbiano l'attributo name="type" perché il motore di routing è in grado di attingere il dato anche dalla collezione Form. In quel caso, comunque, il parametro 'type' avrebbe un altro valore, oppure stringa vuota. Un null denota proprio l'assenza di valore.


A parte questo volevo dire che, anche a scopo didattico, puoi lasciare che sia Visual Studio a generarti le action destinate al salvataggio dei dati. Infatti, quando aggiungi un controller al progetto, hai l'opportunità di spuntare la casella "Add action methods for Create, Delete, Update and Details Scenario" che ti creerà automaticamente le actions, fornite dei parametri e deli attributi idonei a quello specifico utilizzo. Così potresti liberarti del parametro 'type' perché ci sarà una action specifica per il salvataggio.

ciao
Modificato da BrightSoul il 03 dicembre 2011 11.35 -

- So what you're saying is, if we get in trouble, there's no one to help us out?
- I'm afraid not.
- Fantastic!

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.
Community
Ultimi messaggi
UTENTI ONLINE
In primo piano

I più letti di oggi

Media
In evidenza
MISC