2013-01-17 17 views
9

Bunun çok basit olduğundan eminim ama burada biraz takılıyorum. Uygulamam için tanımlanan yönlendirme sadece varsayılan değerdir. Aşağıdaki denetleyici tanımlanmış. Ben /Admin/EditDocument/1/ gittiğinizde beklendiği gibiBu nesne için tanımlı parametreler bulunmuyor. ASP.NET MVC Denetleyicide

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

sonra ilk eylemi, aşağıdaki görünümü render tam yürütür: -:

No parameterless constructor defined for this object. Diğer sorular - Bu göndererek Açık

<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" /> 
} 

bir hata alıyorum Görünüşe göre ilgili sorular MVC: No parameterless constructor defined for this object, IoC konteynerinin düzgün bir şekilde ayarlanmadığını, ancak ilk eylemin bir problem olmadan yürütüldüğü gerçeği ile ilgili bir sorun olmadığını gösterir. burada amblem mi var?

Herhangi bir yardım büyük memnuniyetle karşılanacaktır.

Saygılarımızla.

Simon

+2

Lütfen DocumentViewModel –

cevap

14

public DocumentEditViewModel(){} 
+0

için mükemmel bir kod sağlayın. Nasıl olduğunu bildiğiniz zaman kolaydır;) – baynezy

+1

NEDEN Bu gerekli? Aklımda, denetleyiciler, çoğu sınıf gibi, sistem tarafından oluşturulan varsayılan kuruculara sahip olmalıdır. – levininja

+0

@levininja JTMon, sorunuza cevap verdi – Mediator

1

mu DocumentEditViewModel parametresiz kurucuya sahip sınıf DocumentEditViewModel varsayılan yapıcı eklemek? Bu, post görünümünüzde modele bakmak için gerekli olduğuna inanıyorum.

5

MVC çerçevesi, DocumentViewModel sınıfının bir örneğini oluşturmaya çalışıyor ancak herkese açık olarak erişilebilen bir varsayılan kurucu bulamadı (herhangi bir argüman almayan). Ya önerilmiş @simplyDenis gibi bir varsayılan yapıcıyı tanımlayabilir veya özel kurucunuzu kullanarak örneği oluşturabilen bir model ModelBinder tanımlayabilirsiniz.

0

Biraz farklı bir sorunla karşılaştım. Model sınıflarımdan biri abstract idi.

0

DocumentEditViewModel yapıcısının erişilebilirlik düzeyi korunuyorsa, aynı hatayı da alırsınız.