2009-08-07 8 views
3

J'utilise ce code dans ASP.NET MVC 2 Aperçu 1:S'agit-il d'un bogue ASP.NET MVC 2 Preview 1, et quel est le problème?

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); 
    } 

Lorsque j'utilise un argument URL valide tel que "/ Commentaire/Liste/22638", je reçois l'erreur:

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

Si je change la déclaration:

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

le code fonctionne très bien. Est-ce quelque chose que je fais mal, ou un problème avec la réflexion étant trop de type strict pour Int32 vs Int64? Et que puis-je faire pour le réparer? Cast le long comme une ficelle?

+0

Cela fonctionne pour moi dans MVC1. Pouvez-vous reproduire l'erreur dans MVC1? –

+0

N'a pas encore essayé MVC 1 .. comme il s'agit d'un nouveau projet, je suis "regarder en avant" et profiter du nouveau support de template tellement je ne veux pas revenir à MVC 1. C'est la version qui fait MVC plus convaincant pour moi :) –

+0

Je n'ai pas testé cela dans MVC 1, je veux dire. –

Répondre

1

Je pense que cela est plus facile à lire/moins salissant, et fonctionne dans MVC 1 aussi:

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

Merci Craig (et Spencer). J'avais aussi besoin de mettre à jour mon routage pour prendre en charge le second ID, et je l'ai fonctionné maintenant. –

1

Essayez

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

Sténographie pratique: [DefaultValue (0L)] – Levi

Questions connexes