2013-01-17 18 views
9

Sono sicuro che questo è abbastanza semplice ma sono un po 'bloccato qui. Il routing definito per la mia app è solo l'impostazione predefinita. Ho definito il seguente controller.Nessun costruttore parametrico definito per questo oggetto. in ASP.NET MVC Controller

namespace Baynes.Wedding.Web.Controllers 
{ 
    public class AdminController : Controller 
    { 
     private readonly IAuthProvider _authProvider; 
     private readonly IDocumentRepository _documentRepository; 

     public AdminController(IAuthProvider authProvider, IDocumentRepository documentRepository) 
     { 
      _authProvider = authProvider; 
      _documentRepository = documentRepository; 
     } 

     public ViewResult EditDocument(int id) 
     { 
      var document = _documentRepository.Select(id); 

      return View(new DocumentEditViewModel(document)); 
     } 

     [HttpPost] 
     public ActionResult EditDocument(DocumentEditViewModel model) 
     { 
      if (ModelState.IsValid) 
      { 
       _documentRepository.Update(model.ToDocument()); 
       return RedirectToAction("ListDocuments"); 
      } 

      return View(); 
     } 
    } 
} 

Se navigando nelle /Admin/EditDocument/1/ quindi la prima azione esegue esattamente come previsto, rendendo la seguente vista: -

<h2>@ViewBag.Title</h2> 
@using (Html.BeginForm("EditDocument", "Admin", FormMethod.Post)) { 
    @Html.ValidationSummary(true) 
    @Html.HiddenFor(m => Model.Id) 
    <div> 
     @Html.LabelFor(m => Model.Title) 
    </div> 
    <div> 
     @Html.TextBoxFor(m => Model.Title) 
    </div> 
    <div> 
     @Html.LabelFor(m => Model.Body) 
    </div> 
    <div> 
     @Html.TextAreaFor(m => Model.Body) 
    </div> 
    <div> 
     @Html.LabelFor(m => Model.Url) 
    </div> 
    <div> 
     @Html.TextBoxFor(m => Model.Url) 
    </div> 

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

Su Inviando questo ottengo un errore: -

No parameterless constructor defined for this object. Altre domande domande apparentemente collegate MVC: No parameterless constructor defined for this object suggeriscono che è una cosa da fare con il contenitore IoC che non viene impostato correttamente, ma sicuramente il fatto che la prima azione venga eseguita senza problemi significa che non è il pr oblem qui?

Qualsiasi aiuto sarebbe molto apprezzato.

Saluti.

Simon

+2

è possibile fornire codice per DocumentViewModel –

risposta

14

aggiungere alla classe DocumentEditViewModel costruttore di default

public DocumentEditViewModel(){} 
+0

Perfetto grazie. È facile quando sai come;) – baynezy

+1

PERCHÉ è necessario? Nella mia mente, i controllori dovrebbero avere costruttori predefiniti creati dal sistema proprio come la maggior parte delle classi. – levininja

+0

@levininja JTMon ha risposto alla tua domanda – Mediator

1

fa DocumentEditViewModel ha un costruttore senza parametri? Credo che questo sia necessario per la modellazione dei modelli sulla tua visualizzazione post.

5

Il framework MVC sta tentando di creare un'istanza della classe DocumentViewModel ma non riesce a trovare un costruttore predefinito accessibile pubblicamente (che non accetta argomenti). È possibile definire un tale costruttore predefinito come @simplyDenis suggerito o definire un ModelBinder cusotm che può creare l'istanza utilizzando il costruttore personalizzato.

0

Ho avuto un problema leggermente diverso. Una delle mie classi di modelli era abstract.

0

Se il livello di accessibilità del costruttore DocumentEditViewModel è protetto, si otterrà lo stesso errore.

Problemi correlati