2012-06-28 9 views
9

私はMVC4アプリケーションを作成しています。自分のビューから自分のコントローラにフォームを戻そうとすると、いくつか問題が発生します。System.MissingMethodException:このオブジェクトに対して定義されたパラメータのないコンストラクタはありません。 MVC4

私はこのトピックに関するいくつかの記事を読んでいますが、残念ながら、どのオブジェクトにパラメータのないコンストラクタがないのかはわかりませんでした。私のすべてのモデルクラスには、パラメータなしコンストラクタがあります。そしてデバッグでは、エラースタックはInternet Explorerにあるだけですが、Visual Studioでは何も起こりません。

例外の詳細:System.MissingMethodException:このオブジェクトのために定義されていませんパラメータなしのコンストラクタ

これは、エラー・スタックです。

ソースエラー:

未処理の例外は、現在のWeb要求の実行中に生成されました。以下の例外スタックトレースを使用して、例外の起点および場所に関する情報を識別できます。

スタックトレース:

[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 

私のモデルクラス:

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

答えて

9

あなたクラスのデフォルトコンストラクタがprotectedです。それをpublicに変更してみてください。

+0

ああ!ありがとうございました。私は数日前までそれを見たことがないと確信しています! – PuK

11

これは、基本クラスがパラメータを受け入れるように定義されている場合にも発生します。 MVCは正しい値を渡すことができないので失敗します。パラメータのないクラスも宣言してみてください。これは、ボタンクリックポストバック中の私の問題を解決しました。

例:

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


} 
関連する問題