2013-04-09 4 views
2
public enum Employee 
    { 
     FT, 
     PT, 
    } 

Cela ne fonctionne pasENUM personnalisée comme paramètre optionnel

public ActionResult Index(Employee s = Employee.PT) 
     { 
      ViewData["Message"] = s.ToString(); 

      return View("MyView"); 
     } 

Détails de l'exception: System.ArgumentException: Les paramètres dictionnaire de contient une entrée non valide pour le paramètre 's' pour la méthode « Système .Web.Mvc.ActionResult Index (SampleControllerEx.Controllers.Employee) 'dans ' SampleControllerEx.Controllers.HomeController '. Le dictionnaire contient une valeur de type 'System.Int32', mais le paramètre requiert une valeur de type 'SampleControllerEx.Controllers.Employee'. Paramètre Nom: paramètres

Mais au-dessous, on travaille

public ActionResult Index([DefaultValue(Employee.PT)] Employee s) 
     { 
      ViewData["Message"] = s.ToString(); 

      return View("MyView"); 
     } 

Puis-je savoir pourquoi 'DefaultValue' ne supporte que ENUM personnalisé, où le paramètre optionnel (4.0) ne supporte pas?

+0

Sons comme votre routage est erroné. – leppie

+0

@leppie DefaultValue fonctionne avec le même routage. pourquoi l'option .net 4.0 ne fonctionne-t-elle pas correctement? –

+0

Il serait plus facile de rendre le paramètre nullable. Si vous voulez utiliser le paramètre, vous pouvez utiliser 'if ((s ?? Employee.PT) == Employee.PT) {// du code}' – Silvermind

Répondre

1

Vous pouvez le faire de telle manière:

public ActionResult Index(int employeeType) 
     { 
      Employee s = (Employee) employeeType; 
      ViewData["Message"] = s.ToString(); 

      return View("MyView"); 
     } 
Questions connexes