Verwenden einer System.Guid als Primärschlüssel in ASP.Net MVC?

8

Ich habe eine Tabelle in der Datenbank erstellt, die eine System.Guid als Primärschlüssel hat. Das erforderliche ADO.Net Entity Framework-Modell wurde generiert und die erforderlichen gespeicherten Prozeduren wurden zugeordnet.

Ich habe einen neuen Controller erstellt und den grundlegenden erforderlichen Code für Create und Edit für die Daten hinzugefügt. Wenn Sie jedoch auf den Link zum Bearbeiten eines bestimmten Datensatzes klicken, wird der folgende Fehler generiert:

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

Die Editieraktion wird im Controller wie folgt deklariert:

%Vor%

Beim Hinzufügen eines neuen Datensatzes wird die neue GUID über eine Stored Procedure generiert und die Liste zeigt die korrekte GUID an. Die URL gibt auch die richtige Guid zum Abrufen aus.

Ich kann nicht den Punkt erfassen, an dem das scheitert, aber wie würde ich eine System.Guid als Parameter an den Controller übergeben?

    
BinaryMisfit 27.09.2009, 12:06
quelle

2 Antworten

17

Sofern Sie Ihre Routen nicht aktualisiert haben, erwartet sie (standardmäßig), dass der letzte Parameter in einer Route den Namen "id" hat. Das heißt, wenn Sie eine Route wie / specific / edit / 5646-0767 -... haben, wird die GUID mit dem Schlüssel "id" in das Route Value Dictionary gemappt, unabhängig davon, wie der Parameter Ihrer Methode benannt ist. Ich würde diese Konvention befolgen und die Methodendefinition zu:

ändern %Vor%

Sie können dies umgehen, indem Sie explizit den Namen des route-Parameters angeben, aber am Ende erhalten Sie eine URL, die wie folgt aussieht: / specific / edit? itemid = 5646-0767 -...

    
tvanfosson 27.09.2009, 12:13
quelle
4

Geben Sie den folgenden Beispielcode für jeden ein, der sie benötigen könnte (ich habe es wirklich getan)

%Vor%

Danke für die Antwort, über die ich in die richtige Richtung geleitet habe

    
Geovani Martinez 19.05.2011 02:51
quelle