2016-10-18 1 views
0

Ich erhalte eine "nicht nullable Typ System.Int32 Fehler" wenn, klicken Sie auf unter Hyperlink.Bearbeiten Sie Details mithilfe von GUID auf Hyperlink (nicht Nullable type System.Int32 Fehler)

@Html.ActionLink("Edit", "Edit", "Student", new { id = item.Id },null) 

Klasse Struktur

public class BasicInfo 
{ 
public Guid Id { get; set; } 
public string FirstName { get; set; } 
public string LastName { get; set; } 
....... 
} 

Kontrolleurs Ansicht Methode

public ActionResult Edit(int id) 
{ 
    if (id != null) 
    { 
    //dbConnect's edit method return the records base on selected records 
    //edit method calling store procedure to fetch records and return list 
    return View("Edit", dbConnect.edit(ObjInfo)); 
    } 
return View(); 
} 

, wenn Sie unten Screenshot sehen dann, Sie bemerkt, dass GUID in URL ist vorbei, aber „00.000.000-0.000 -0000-0000-000000000000 "nicht in der Datenbank vorhanden.

Nach meinem Verständnis muss URL GUID enthalten, die die Datenbank gegen entsprechende Datensatz speichern.

got error after clicked on edit hyperlink Table Structure

lassen Sie mich wissen, wenn mehr Details

+0

Die Fehlermeldung scheint ziemlich selbsterklärend zu sein: Sie haben einen Nullwert für 'id' angegeben. Sie müssen herausfinden, warum. –

+0

ich kann nicht identifizieren, wie es NULL-Wert an ID übergeben? ausgewählte Datensätze enthalten GUID (ID) -Wert in der Datenbank – Beginners

+0

Der Server muss "00000000-0000-0000-0000-000000000000" als "Null" GUID interpretieren. Versuchen Sie eine andere GUID; Sie werden niemals eine GUID mit nur Nullen in Ihrer Datenbank sehen, es sei denn, Sie schreiben absichtlich eine. –

Antwort

0

erforderlich sind, sieht es aus wie Sie ein benutzerdefiniertes Modell Bindemittel gemäß here hinzufügen müssen:

Wenn Sie benötigen einen Parameter vom Typ Guid in Ihren Aktionen ist die Erstellung eines benutzerdefinierten Modellbinders erforderlich. Dies ist meine Gewohnheit Modelbinder:

public class GuidModelBinder : IModelBinder 
{ 
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     var parameter = bindingContext 
      .ValueProvider 
      .GetValue(bindingContext.ModelName); 

     return Guid.Parse(parameter.AttemptedValue); 
    } 
} 

Nun müssen wir unsere eigenen Modelbinder beim Start der Anwendung registrieren. Wir können es so machen (in Application_Start Methode der Global.asax.cs):

public ActionResult Edit(Guid id) 
{ 
    // Your code here 
} 

Ready:

ModelBinders.Binders.Add(typeof(Guid), new GuidModelBinder()); 

So ist unsere Aktion wie folgt aussieht! Jetzt funktioniert alles wie erwartet.

+0

@Beginners, hat dies zur Lösung Ihres Problems beigetragen? –

Verwandte Themen