Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [c# MVC4] problema con il passaggio di argomenti ad un action

    Salve, ho un problema con il passaggio di argomenti ad un action in mvc4
    Praticamente ho un controller home ch ha all interno una action che accetta un argomento int chiamato id.Una cosa semplice insomma ... il problema si presenta quando rinomino il nome della variabile con ad esempio idt. A questo punto quando eseguo il codice mi si presenta l'errore :

    ArgumentException: Il dizionario dei parametri contiene una voce Null per il parametro 'IdT' di tipo non nullable ....

    La cosa buffa è che se rinomino idt con il vecchio nome id tutto funziona correttamente

    ps. L'argomento viene passato correttamente a Runtime, solo nel caso idt me lo ritrovo nullable.

    Sapete spiegarmi questo comportamento anomalo? posto il codice per chiarezza:

    codice:
    public class HomeController : Controller
    {
    public ActionResult Index(int id)--> se rinomino id con qualcos altro mi arriva null, da cui l errore
            {
    return view();
            }
    }
    
    url richiamata ;
    http;//localhost/Controller/Action/1
    
    Nel primo caso (id) mi arriva 1 sulla action, nel secondo caso (es. idt) mi arriva null

  2. #2
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    questa chiamata:

    http;//localhost/Controller/Action/1 (sono sicuro tu volessi scrivere http://localhost/Home/Index/1)

    è possibile farla solo perche nelle regole di routing hai la regola:

    codice:
    routes.MapRoute(
                    name: "Default",
                    url: "{controller}/{action}/{id}",
                    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
                );
    se cambi il nome del parametro la regola viene applicata ma viene valorizzato il parametro id che non è presente tra i parametri della action mentre non viene bindato nulla al parametro idt. L'eccezione viene sollevata perche idt è un tipo value e non puo non contenere un valore. Per verificare quanto dico basta effettuare la chiamata GET 'al naturale':

    http://localhost/Home/Index/?idt=1

    e vedrai che funziona regolarmente.

    Per risolvere il problema devi creare una regola di routing per il parametro idt. Per esempio:

    codice:
    routes.MapRoute(
                    name: "Default",
                    url: "{controller}/{action}/{idt}",
                    defaults: new { controller = "Home", action = "Index", idt = UrlParameter.Optional }
                );

  3. #3
    Grazie, capito.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.