2009-09-27 13 views
8

Ho creato una tabella nel database che ha un System.Guid come chiave primaria. Il modello richiesto di Entity Framework di ADO.Net è stato generato e le procedure memorizzate richieste sono state mappate.Utilizzo di System.Guid come chiave primaria in ASP.Net MVC?

Ho creato un nuovo controller e aggiunto il codice di base richiesto per Crea e modifica per i dati. Tuttavia quando il clic sul link per modificare il record particolare, viene generato il seguente errore:

The parameters dictionary contains a null entry for parameter '[MyId]' of non-nullable type 'System.Guid' for method 'System.Web.Mvc.ActionResult Edit(System.Guid)' in '[MySite].[MyController].[SpecificController]'. To make a parameter optional its type should be either a reference type or a Nullable type. Parameter name: parameters

L'azione di modifica è dichiarato nel controller come segue:

public ActionResult Edit(Guid itemId) 
{ 
    return View(); 
} 

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Edit(MyItem itemToModify) 
{ 

} 

Quando si aggiunge un nuovo registrare il nuovo Guid viene generato tramite una stored procedure e l'elenco visualizza la guida corretta. L'Url sta anche passando la corretta guida per il recupero.

Non riesco a catturare il punto in cui questo non funziona, ma come faccio a passare un System.Guid come parametro al Controller?

risposta

17

A meno che non si siano aggiornati i percorsi, è in attesa (per impostazione predefinita) del parametro finale in un percorso denominato "id". Cioè, se hai un percorso come/specifico/modifica/5646-0767 -..., mapperà il guid nel dizionario del valore del percorso con la chiave "id" indipendentemente da quale sia il nome del parametro sul tuo metodo. Mi piacerebbe seguire questa convenzione e modificare la definizione di metodo a:

public ActionResult Edit(Guid id) 

È possibile aggirare il problema, specificando esplicitamente il nome del parametro percorso, ma poi si finisce con un URL che assomiglia:/specifica/modificare? itemid = 5646-0767 -...

+0

Ora mi sento stupido a chiedere: ( – BinaryMisfit

+0

Non preoccuparti di questo - l'unica ragione per cui ho saputo che la risposta è che ho fatto la stessa cosa una volta e ho dovuto capirlo. – tvanfosson

4

Mettere il codice di esempio per tutti coloro che potrebbero averne bisogno (ho certo fatto)

 public ActionResult Profile(Guid? id) 
    { 
     if (!id.HasValue) 
     { 
      return View(new ProfileRepository().GetUserProfile(User.Identity.Name)); 
     } 

     return View(new ProfileRepository().GetUserProfile(id.Value)); 

    } 

Grazie per l'Anwer sopra che mi ha portato in alto a destra direzione

Problemi correlati