2009-08-07 10 views
3

Ich verwende diesen Code in ASP.NET MVC 2 Vorschau 1:Ist das ein Fehler in ASP.NET MVC 2 Preview 1, und worum geht es?

public ActionResult List(long id, [DefaultValue(0)] long? commentId) 
    { 
     var model = UserComment.ForRefId(id); 
     PageTitle = string.Format("Comments for '{0}'", 
            SetCommentThread(id).Subject); 
     ViewData[MvcApplication.SAnchor] = commentId; 
     return View("List", model); 
    } 

Wenn ich ein gültiges URL-Argument verwenden, wie zum Beispiel "/ Kommentar/Liste/22638", erhalte ich die Fehlermeldung:

The parameters dictionary contains an invalid entry for parameter 'commentId' for method 'System.Web.Mvc.ActionResult List(Int64, System.Nullable 1[System.Int64])' in 'ThreadsMVC.Controllers.CommentController'. The dictionary contains a value of type 'System.Int32', but the parameter requires a value of type 'System.Nullable 1[System.Int64]'. Parameter name: parameters

Wenn ich die Erklärung zu ändern:

public ActionResult List(long id, [DefaultValue(0)] int? commentId) 

Der Code läuft gut. Ist das etwas, das ich falsch mache, oder ein Problem mit der Reflexion, die für Int32 vs Int64 zu streng ist? Und was kann ich tun, um es zu reparieren? Cast the long als eine Schnur?

+0

Dies funktioniert für mich in MVC1. Können Sie den Fehler in MVC1 reproduzieren? –

+0

MVC 1 noch nicht ausprobiert .. da dies ein neues Projekt ist, "schaue ich voraus" und genieße die neue Vorlagenunterstützung so sehr, dass ich nicht zu MVC 1 zurückkehren möchte. Dies ist die Version, die das macht MVC zwingender zu mir :) –

+0

Ich habe dies in MVC 1 nicht getestet, meine ich. –

Antwort

1

Ich denke, diese besser lesbar/weniger chaotisch ist, und arbeitet in MVC 1, auch:

public ActionResult List(long id, long? commentId) 
{ 
    var model = UserComment.ForRefId(id); 
    PageTitle = string.Format("Comments for '{0}'", 
           SetCommentThread(id).Subject); 
    ViewData[MvcApplication.SAnchor] = commentId.GetValueOrDefault(0); 
+1

Danke Craig (und Spencer). Ich musste auch mein Routing aktualisieren, um die zweite ID zu unterstützen, und ich habe es jetzt funktioniert. –

1

Versuchen

public ActionResult List(long id, [DefaultValue((long)0)] long? commentId) 
+1

Bequeme Kurzschrift: [DefaultValue (0L)] – Levi