2012-06-28 34 views
9

Bir MVC4 uygulaması oluşturuyorum ve bir formumu denetleyicime geri döndürmeye çalıştığımda bazı sıkıntılarım var.System.MissingMethodException: Bu nesne için tanımlanmış hiçbir parametresiz kurucu yok. MVC4

Konuyla ilgili birkaç SO gönderi okuyorum ancak maalesef, hangi nesnenin parametresiz bir kurucuya sahip olmadığını bulmayı başaramadım. Tüm model sınıflarım hiçbir parametre yapıcısına sahip değil. Ve hata ayıklamada hata yığını sadece Internet Explorer'da ancak görsel stüdyosunda hiçbir şey olmaz.

durum ayrıntıları: System.MissingMethodException Bu nesne için tanımlanan Resim parametresiz oluşturucu

Bu

hata yığın.

Kaynak hatası:

işlenmeyen bir özel durum geçerli web isteği yürütülürken oluşturuldu. İstisna durumunun kaynağı ve konumu ile ilgili bilgiler aşağıdaki istisna yığını izlemesi kullanılarak tanımlanabilir.

Yığın İzleme:

[MissingMethodException: No parameterless constructor defined for this object.] 
    System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) +0 
    System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache) +117 
    System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache) +247 
    System.Activator.CreateInstance(Type type, Boolean nonPublic) +106 
    System.Web.Mvc.DefaultModelBinder.CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType) +243 
    System.Web.Mvc.DefaultModelBinder.BindComplexModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +151 
    System.Web.Mvc.DefaultModelBinder.UpdateCollection(ControllerContext controllerContext, ModelBindingContext bindingContext, Type elementType) +545 
    System.Web.Mvc.DefaultModelBinder.BindComplexModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +609 
    System.Web.Mvc.DefaultModelBinder.GetPropertyValue(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor, IModelBinder propertyBinder) +33 
    System.Web.Mvc.DefaultModelBinder.BindProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor) +497 
    System.Web.Mvc.DefaultModelBinder.BindProperties(ControllerContext controllerContext, ModelBindingContext bindingContext) +283 
    System.Web.Mvc.DefaultModelBinder.BindComplexModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +677 
    System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContext controllerContext, ParameterDescriptor parameterDescriptor) +489 
    System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContext controllerContext, ActionDescriptor actionDescriptor) +153 
    System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__1e(AsyncCallback asyncCallback, Object asyncState) +883059 
    System.Web.Mvc.Async.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +137 
    System.Web.Mvc.Async.AsyncResultWrapper.Begin(AsyncCallback callback, Object state, BeginInvokeDelegate beginDelegate, EndInvokeDelegate`1 endDelegate, Object tag, Int32 timeout) +167 
    System.Web.Mvc.Async.AsyncResultWrapper.Begin(AsyncCallback callback, Object state, BeginInvokeDelegate beginDelegate, EndInvokeDelegate`1 endDelegate, Object tag) +27 
    System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__17(AsyncCallback asyncCallback, Object asyncState) +50 
    System.Web.Mvc.Async.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +137 
    System.Web.Mvc.Async.AsyncResultWrapper.Begin(AsyncCallback callback, Object state, BeginInvokeDelegate beginDelegate, EndInvokeDelegate`1 endDelegate, Object tag, Int32 timeout) +167 
    System.Web.Mvc.Controller.BeginExecuteCore(AsyncCallback callback, Object state) +869289 
    System.Web.Mvc.Async.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +137 
    System.Web.Mvc.Async.AsyncResultWrapper.Begin(AsyncCallback callback, Object state, BeginInvokeDelegate beginDelegate, EndInvokeDelegate`1 endDelegate, Object tag, Int32 timeout) +167 
    System.Web.Mvc.Async.AsyncResultWrapper.Begin(AsyncCallback callback, Object state, BeginInvokeDelegate beginDelegate, EndInvokeDelegate endDelegate, Object tag) +27 
    System.Web.Mvc.Controller.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +391 
    System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__3(AsyncCallback asyncCallback, Object asyncState) +827094 
    System.Web.Mvc.Async.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +137 
    System.Web.Mvc.Async.AsyncResultWrapper.Begin(AsyncCallback callback, Object state, BeginInvokeDelegate beginDelegate, EndInvokeDelegate`1 endDelegate, Object tag, Int32 timeout) +167 
    System.Web.Mvc.Async.AsyncResultWrapper.Begin(AsyncCallback callback, Object state, BeginInvokeDelegate beginDelegate, EndInvokeDelegate endDelegate, Object tag) +27 
    System.Web.Mvc.<>c__DisplayClass6.<BeginProcessRequest>b__2() +283 
    System.Web.Mvc.<>c__DisplayClassb`1.<ProcessInApplicationTrust>b__a() +19 
    System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Func`1 func) +161 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +405 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +375 

Benim Modeli sınıfları: senin sınıfına

public class Form 
    { 
     public Form() 
     { 
      this.Rows = new List<Row>(); 
     } 

     public List<Row> Rows { get; set; } 
    } 

    public class Row 
    { 
     protected Row() 
     { 
      this.Label = string.Empty; 
      this.Type = string.Empty; 
     } 

     public string Label { get; set; } 

     public string Type { get; set; } 
    } 

    public class SimpleRow : Row 
    { 
     public SimpleRow() 
     { 
      this.Value = string.Empty; 
     } 

     public string Value { get; set; } 
    } 


    public class DropDownRow : Row 
    { 
     public DropDownRow() 
     { 
      this.Content = new List<ContentDropDown>(); 
     } 

     public List<ContentDropDown> Content { get; set; } 
    } 


    public class ContentDropDown 
    { 
     public ContentDropDown() 
     { 
      this.Title = string.Empty; 
      this.Selected = false; 
     } 

     public string Title { get; set; } 

     public bool Selected { get; set; } 
    } 

cevap

9

varsayılan yapıcı protected olduğunu. public'a değiştirmeyi deneyin.

+0

ah !! Çok teşekkür ederim eminim ki birkaç güne kadar görmemiştim! – PuK

11

Bu, temel sınıfınızın parametre kabul etmek için tanımlanmış olması durumunda da olabilir. MVC doğru değeri geçemediği için başarısız olur. Parametresiz bir sınıfı da bildirmeyi deneyin. Bu, düğmeyi tıklama geri gönderme sırasında sorunumu çözdü.

Örn:

public class Employee 
{ 

    public int EmployeeID {get;set;} 
    public string EmployeeName {get;set;} 
    public int CostCenter {get;set;} 
    public DateTime StartDate {get;set;} 

    public Employee(int employeeID) 
    { 
     //Initialize values 
    } 

    //Also include a parameter-less construct like below 
    public Employee() 
    { 
    } 


} 
İlgili konular