2010-08-13 10 views
1

J'utilise MVC 2.0 avec un Html.ListBoxFor comme ci-dessous:System.MissingMethodException: Aucun constructeur défini parameterless pour cet objet

<% using (Html.BeginForm()) { %> 

     <input type="submit" value=">" /> 

     <%= Html.ListBoxFor(x => x.lstTest, new MultiSelectList(new [] {"someone", "crap", "why"})) %> 

    <% } %> 

Lorsque je clique sur l'entrée bouton soumettre ci-dessous avec rien sélectionné, il affiche de nouveau bien, quand je sélectionne l'un des 3 éléments dans la liste, il jette cette erreur:

System.MissingMethodException: No parameterless constructor defined for this object. 

Des idées? voici mon code de contrôleur:

[HandleError] 
public class HomeController : Controller 
{ 
    public HomeController() 
    { 

    } 

    public ActionResult Index() 
    { 
     ViewData["Message"] = "Test Harness"; 

     return View(); 
    } 

    [HttpGet] 
    public ActionResult About() 
    { 
     ViewData["mykey"] = "Test Harness"; 

     LogOnModel model = new LogOnModel(); 
     model.lstTest = new MultiSelectList(new [] {"A", "B", "C"}); 

     return View(model); 
    } 


    [HttpPost] 
    public ActionResult About(LogOnModel model) 
    { 
     ViewData["mykey"] = "Test Harness"; 

     model.lstTest = new MultiSelectList(new [] { "" }); 

     return View(model); 
    } 
} 

Répondre

0

Cette erreur provient de la ControllerFactory et non de la vue. Il indique que vous n'avez pas de constructeur paramerless dans votre contrôleur. DefaultControllerFactory pour ASP.NET MVC peut uniquement instancier un contrôleur avec un constructeur public sans paramètre. Si vous branchez votre propre ControllerFactory et utilisez un outil DI/IoC, vous pouvez contourner cette limitation.

+0

Bonjour, mon contrôleur dispose d'un constructeur public sans paramètre, existe-t-il un autre moyen de contourner ce problème? – Whyyy

+0

Pouvez-vous poster votre code de contrôleur? –

+0

Publié ci-dessus, merci – Whyyy

4

Est-ce que votre LogOnModel a un constructeur sans paramètre? Il en faut un pour DefaultModelBinder pour l'instancier. En outre, lorsque vous publiez l'exception, veuillez publier la trace de pile complète à partir de l'objet d'exception, sinon nous devinons simplement où l'erreur s'est réellement produite.