ASP.NET MVC:このオブジェクトにはパラメーターのないコンストラクターが定義されていません


172
Server Error in '/' Application.
--------------------------------------------------------------------------------

No parameterless constructor defined for this object. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

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

Source Error: 


Line 16:             HttpContext.Current.RewritePath(Request.ApplicationPath, false);
Line 17:             IHttpHandler httpHandler = new MvcHttpHandler();
Line 18:             httpHandler.ProcessRequest(HttpContext.Current);
Line 19:             HttpContext.Current.RewritePath(originalPath, false);
Line 20:         }

Steven Sandersonの「Pro ASP.NET MVC Framework」の本を読んでいました。132ページで、著者の推奨に従って、ASP.NET MVC Futuresアセンブリをダウンロードして、MVCプロジェクトに追加しました。[注:これは赤いニシンの可能性があります。]

この後、プロジェクトをロードできなくなりました。上記のエラーで私は冷たくなりました。

私の質問はありません「あなたは私が私のコードを修正するのに役立つだろうか?」、

代わりに、もっと一般的に知りたいのですが。

  • この問題のトラブルシューティング方法を教えてください。
  • 何を探すべきですか?
  • 根本的な原因は何でしょうか?

ルーティングとコントローラーを今よりも深いレベルで理解する必要があるようです。

回答:


226

同様の問題が発生しました。同じ例外Modelは、にパラメーターのないコンストラクターがない場合にも発生します。

コールスタックは、モデルの新しいインスタンスの作成を担当するメソッドを考え出していました。

System.Web.Mvc.DefaultModelBinder。CreateModel(ControllerContext controllerContext、ModelBindingContext bindingContext、Type modelType)


ここにサンプルがあります:

public class MyController : Controller
{
    public ActionResult Action(MyModel model)
    {

    }
}

public class MyModel
{
    public MyModel(IHelper helper) // MVC cannot call that
    {
        // ...
    }

    public MyModel() // MVC can call that
    {
    }
}

16
JSONデータをアクションにPOSTすると、同様のエラーが発生しました。バインドしようとしている私のモデルには、パラメーターのないコンストラクターがないことがわかりました!
Tim

1
注意:コンストラクターを定義し、パラメーターレスコンストラクターを定義しない場合、シリアル化中にこの問題が発生します(パラメーターレスbla bla ...など)。つまり、この例では、定義したコンストラクター(public MyModel(IHelper helper){})を削除すると、問題が消えるので、コンストラクターを作成するたびに、パラメーターなしのコンストラクターを作成する必要があります...そのように:コンストラクターの定義を開始すると、システムは 'デフォルトオブジェクト'を作成するリスクを負いません。なぜなら、それが理にかなっているかどうかわからないからです...そのようなもの。
H_He 2014

1
タプル...たぶんここに来る他の人々のために:あなたのクラスにタプル(Tuple <string、string> data;のような)があるだけなら、シリアライズはOKです(私はJSONシリアライズ中にこの問題に遭遇したため)...しかし、List <Tuple <string、string >>データのようなものを使用する場合、「パラメーターなしのコンストラクターなし」エラーが発生し始めます。.Netはタプルを作成できない/作成できないため(そのための参照はありませんが、Tuple <string、string> data = new Tuple <string、string>();はコンパイルされません... Tuple <string、 string> data = new Tuple <string、string>( ""、 ""); ok
H_He

3
ええ、でも、依存関係のあるクラスにパラメーターなしのコンストラクターをどのように追加し、それらをコンストラクターに注入したいですか?それは私が得ない問題の一部です...
EluciusFTW

2
@ToaoG依存性注入ライブラリは、「注入コンストラクタ」を選択する方法を提供する必要があります。ところで、viewmodelsに依存性注入があるのは奇妙に見えます。
SandRock、2015

89

これは、モデルがSelectListを使用している場合にも発生する可能性があります。これには、パラメーターのないコンストラクターがないためです。

public class MyViewModel
{
    public SelectList Contacts { get;set; }
}

これが原因である場合、別の方法でモデルをリファクタリングする必要があります。したがって、を使用IEnumerable<Contact>して、さまざまなプロパティ定義でドロップダウンリストを作成する拡張メソッドを記述します。

public class MyViewModel
{
    public Contact SelectedContact { get;set; }
    public IEnumerable<Contact> Contacts { get;set; }
}

public static MvcHtmlString DropDownListForContacts(this HtmlHelper helper, IEnumerable<Contact> contacts, string name, Contact selectedContact)
{
    // Create a List<SelectListItem>, populate it, return DropDownList(..)
}

または、@ Markと@krilovichのアプローチを使用できます。SelectListをIEnumerableに置き換えるだけで、MultiSelectListでも機能します。

 public class MyViewModel
    {
        public Contact SelectedContact { get;set; }
        public IEnumerable<SelectListItem> Contacts { get;set; }
    }

1
私はこの上に多くの時間を無駄に...とList <SelectListItem> .... blarg戻ってくる一つにSelectListのを返していました、私のヘルパー関数をオンにする必要がありました
マーク・

IEnumerable <SelectListItem>を使用して、それらをコンストラクターでnew List <SelectListItem>()としてインスタンス化できます
krilovich

3.5年後にありがとう!
tonyapolis 2015

ありがとうございました。
Kevin Coulson、2015

5年後も有効です。ありがとう!
Neill

23

パラメータを持たないようにするには、コントローラに対応するアクションが必要です。

あなたが持っているコントローラー/アクションの組み合わせのように見えます:

public ActionResult Action(int parameter)
{

}

しかし、あなたは必要です

public ActionResult Action()
{

}

また、Phil HaackのRoute Debuggerをチェックして、ルートのトラブルシューティングを行ってください。


6
例外は、アクションメソッドではなく、コンストラクタに関連しています。
Jason Wicker

4
@Logrythmik。報告された例外はコンストラクターに関するものですが、問題はアクションメソッドにあります。機能しているクラスとアクションメソッドがあり、アクションメソッドにパラメーターを追加すると、このエラーが発生しました。別の解決策は、パラメータの値を提供することです。または、パラメーターをオプションにします。これは、コントローラーがC#にあるときに機能するはずですが、F#では機能しませんでした
Stephen Hosking

また、@ Html.Action( "SomeAction"、new {myParameter = "42"})などを実行している場合は、Html.Action呼び出しのパラメーターの名前がで定義されているパラメーターの名前と一致することを確認してくださいあなたの行動方法!
JTテイラー

20

デフォルトでは、MVCコントローラーにはパラメーターのないデフォルトのコンストラクターが必要です。最も簡単なのは、パラメーターを持つコンストラクターを呼び出すデフォルトのコンストラクターを作成することです。

public MyController() : this(new Helper()) {
}

public MyController(IHelper helper) {
  this.helper = helper;
}

ただし、独自のをローリングすることにより、この機能をオーバーライドできますControllerFactory。これにより、MVCにMyControllerインスタンスを提供することをMVCに伝えることができますHelper

これにより、MVCで依存性注入フレームワークを使用できるようになり、実際にすべてを切り離すことができます。この良い例は、StructureMap Webサイトにあります。全体のクイックスタートは良好であり、彼は「自動配線」で下部に向かってMVCに固有になります。


6
@swilliamsさん、これは正しい答えではないと思います。ここで重要なのは、このオブジェクトに定義されている部分です。これは、渡されたINPUT MODEL(s)が実際に作成できないことを示唆しているがらくたエラーメッセージです。したがって、パラメーターなしのコンストラクターがない入力モデルがある場合、このエラーが発生します。CONTROLLERコンストラクタに関連していると考えるのは非常に簡単です。しかし、そうではありません。
Pure.Krome、2012年

1
これはがらくたなメッセージです。このような応答がなければ、野生のガチョウを追いかけます。この回答と上記の回答のおかげで、私は事態を一変させることができました。バインダーが舞台裏で何をしているかを完全に理解していないのは問題だと思います。私はそれが各プロパティを設定するだけだと考えましたが、何らかの理由で、投稿時に設定前にgetを呼び出しています。したがって、コンストラクターをオーバーロードし、パラメーターの少ないコンストラクターで補正する必要があったため、一部のプロパティが取得するnullを考慮する必要がありましたが、これも予想外でした。
eaglei22

18

このエラーは、IDependencyResolverを使用するときにも発生します。、IoCコンテナーを使用する場合など、依存関係リゾルバーはnullを返します。この場合、ASP.NET MVC 3はデフォルトでDefaultControllerActivatorを使用してオブジェクトを作成します。作成されるオブジェクトに引数なしのパブリックコンストラクターがない場合、指定された依存関係リゾルバーがnullを返したときに例外がスローされます。

これがそのようなスタックトレースの1つです。

[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) +98
   System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache) +241
   System.Activator.CreateInstance(Type type, Boolean nonPublic) +69
   System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +67

[InvalidOperationException: An error occurred when trying to create a controller of type 'My.Namespace.MyController'. Make sure that the controller has a parameterless public constructor.]
   System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +182
   System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) +80
   System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) +74
   System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) +232
   System.Web.Mvc.<>c__DisplayClass6.<BeginProcessRequest>b__2() +49
   System.Web.Mvc.<>c__DisplayClassb`1.<ProcessInApplicationTrust>b__a() +13
   System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) +7
   System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +22
   System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Func`1 func) +124
   System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +98
   System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +50
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +16
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8963444
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184

2
これが原因で問題が発生しました:例外のため、依存関係リゾルバーがコントローラーを構築できませんでした。これはリゾルバーによって飲み込まれ、nullが返され、MVCフレームワークはデフォルトのコントローラーアクティベーターに切り替わり、説明されているエラーが発生しました。
Beriz

@ jmona789 Global.asaxに注入された依存関係をすべて設定したかどうかを確認します。
aloisdgがcodidact.comに移動

13

この例外は、MVCフレームワークのさまざまな場所で発生する可能性があります(たとえば、コントローラーを作成できない、またはそのコントローラーに与えるモデルを作成できない)。

この問題を診断するために私が見つけた唯一の簡単な方法は、独自のコードでMVCを例外のできるだけ近くでオーバーライドすることです。次に、この例外が発生すると、コードがVisual Studio内で壊れ、スタックトレースから問題の原因となっているタイプを読み取ることができます。

これはこの問題に取り組むための恐ろしい方法のようですが、非常に高速で、非常に一貫しています。

たとえば、このエラーがMVC DefaultModelBinder(スタックトレースを確認するとわかる)内で発生している場合は、DefaultModelBinderを次のコードに置き換えます。

public class MyDefaultModelBinder : System.Web.Mvc.DefaultModelBinder
{
    protected override object CreateModel(System.Web.Mvc.ControllerContext controllerContext, System.Web.Mvc.ModelBindingContext bindingContext, Type modelType)
    {
        return base.CreateModel(controllerContext, bindingContext, modelType);
    }
}

そして、Global.asax.csを更新します。

public class MvcApplication : System.Web.HttpApplication
{
...
    protected void Application_Start(object sender, EventArgs e)
    {
        ModelBinders.Binders.DefaultBinder = new MyDefaultModelBinder();
    }
}

これで、次にその例外が発生したときに、Visual StudioはMyDefaultModelBinderクラス内で停止します。「modelType」プロパティをチェックして、問題の原因となったタイプを確認できます。

上記の例は、モデルのバインド中にのみ、「このオブジェクトにパラメーターなしのコンストラクターが定義されていません」という例外が発生した場合にのみ機能します。ただし、MVCの他の拡張ポイント(コントローラーの構築など)についても同様のコードを記述できます。


それが私の問題のために私が考えていたことです。
Doug Chamberlain 2013年

これをもっと賛成できるといいのですが。数分の時間を節約してくれました。
キース

8

同じエラーが発生しました。私の場合、犯人はパブリックでもプライベートでもないコンストラクタでした。

このオブジェクトにはパラメーターのないコンストラクターが定義されていません。

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

再現コード:コンストラクターの前にパブリックがあることを確認してください。

public class Chuchi()
{
     Chuchi()    // The problem is this line. Public is missing
     {
         // initialization
         name="Tom Hanks";
     }

    public string name
    {
        get;
        set;
    }
}

4
ちょうどメモとして、コンストラクターのアクセス修飾子がないと、コンパイラーではデフォルトで「内部」になります。
lsuarez

1
「プライベート」修飾子をそこに置いても問題は解決しません。
krzyski

7

http://tekpub.com/conferences/mvcconfの最初のビデオ

47:10分でエラーが表示され、デフォルトのControllerFactoryをオーバーライドする方法が示されます。つまり、ストラクチャマップコントローラファクトリを作成します。

基本的に、あなたはおそらく依存性注入を実装しようとしていますか?

問題は、インターフェースの依存関係です。


また、StructureMapControllerFactoryクラスをMVCストアフロントプロジェクトから取得できます
Gautam Jain

6

私は次の場合に同じエラーが発生しました:

カスタムModelViewを使用すると、両方のアクション(GETとPOST)が2つのオブジェクトを含むModelViewを渡していました。

public ActionResult Add(int? categoryID)
{
    ...
    ProductViewModel productViewModel = new ProductViewModel(
            product,
            rootCategories
            );
    return View(productViewModel); 
}

POSTも同じモデルビューを受け入れます。

[HttpPost]
[ValidateInput(false)]
public ActionResult Add(ProductModelView productModelView)
{...}

問題は、ビューがModelViewを受け取った(製品とカテゴリ情報のリストの両方が必要でした)が、送信後はProductオブジェクトのみを返していましたが、POST AddがProductModelViewを予期していたため、NULLを渡しましたが、ProductModelViewのみのコンストラクターには2つのパラメーターが必要でした( Product、RootCategories)、それからこのNULLケースのパラメーターのない別のコンストラクターを見つけようとしたところ、「パラメーターなし...」で失敗しました。

したがって、次のようにPOST Addを修正すると、問題が修正されます。

[HttpPost]
[ValidateInput(false)]
public ActionResult Add(Product product)
{...}

これが誰かに役立つことを願っています(これを見つけるのにほぼ半日かかりました!)。


ネストル、これは啓発的で正しいようです。しかし、ビューが受け取っているのとは異なるオブジェクト、つまりProductViewModelではなくProductオブジェクトを返すのはなぜですか?
GilShalit 2010年

ああ、これは私のケースに固有でした。私は製品のデータを保持するだけでよいので、RootCategoriesは印刷のためにのみビューに渡され、入力は行われなかったため、それらの値(RootCategories)は<input >または他の場所。<input>フォーム、ビューデータなどを使用して永続化するのと同じViewModelを保持する必要がありますか?
Nestor

ギルシャリット、今日私は答えを見つけました(すみません、Imが遅いです!)レンダリングされたHTMLを見て、入力が[ObjectName]。[Property]の名前をとるのを見ましたが、元のViewModelの痕跡がないため、各個人のみを取得できますViewModel内のオブジェクトですが、完全なViewModel自体ではありません。例:ProductViewModel vmに内部オブジェクトProduct pとCategory cがある場合、GETコントローラーは1つのモデルvmをビューに送信し、POSTコントローラーは(Product p、Category c)のようなパラメーターのみを受け入れ、vmは受け入れられません。 ..私が間違っている場合は、いくつかのフィードバックをいただければ幸いです。
Nestor

5

私も同じです。ベースモデルクラスに、ビューで定義された名前のプロパティが既にあることを忘れたため、問題が発生しました

public class CTX : DbContext {  // context with domain models
    public DbSet<Products> Products { get; set; }  // "Products" is the source property
    public CTX() : base("Entities") {}
}

public class BaseModel : CTX { ... }
public class ProductModel : BaseModel { ... }
public class OrderIndexModel : OrderModel  { ... }

...とコントローラ処理モデル:

[HttpPost]
[ValidateInput(false)]
public ActionResult Index(OrderIndexModel order) { ... }

特別なことはありませんか?しかし、私はビューを定義します...

<div class="dataItem">
    <%=Html.Label("Products")%>
    <%=Html.Hidden("Products", Model.index)%>   // I FORGOT THAT I ALREADY HAVE PROPERTY CALLED "Products"
    <%=Html.DropDownList("ProductList", Model.products)%>
    <%=Html.ActionLink("Delete", "D")%>
</div>

... POSTリクエストで「パラメータなしのコンストラクタ」エラーが発生します。

お役に立てば幸いです。


5

同様の問題がありましたが、基本的には、アクションメソッドに、モデルバインディングプロセスによって提供されなかった引数がいくつかあるということです(つまり、これらのフィールドは送信ページによって送信されませんでした)。

この問題は、1つを除くすべての引数が指定されていても、不足している引数がnull許容型であっても発生します。

この問題は、タイプミスの結果である可能性もあります。この場合、引数の名前とフォームフィールドの名前は同じではありません。

解決策は、1)名前が一致することを確認すること2)引数にデフォルト値を提供すること3)または、この引数なしで別のアクションメソッドを提供することです。


@yo halに感謝します。あなたの答えは、このエラーの私の特定のインスタンスを解決したものであることがわかりました。フレームワークが吐き出すエラーメッセージは、このインスタンスはこれまで最も役に立たないエラーメッセージです
スコットローレンス、

4

私にもこの問題があり、上記の問題が見つからないので共有したいと思いました。

これは私のコードでした

return RedirectToAction("Overview", model.Id);

このActionResultを呼び出す:

public ActionResult Overview(int id)

私が渡す値は、Overviewのidパラメータであることを理解するのに十分賢いと思いましたが、そうではありません。これはそれを修正しました:

return RedirectToAction("Overview", new {id = model.Id});


4

パラメータなしのパブリックコンストラクタがないため、同じ例外が発生しました

コードはこのようなものでした:

public class HomeController : Controller
{        
    private HomeController()
    {
        _repo = new Repository();
    }

に変わった

 public class HomeController : Controller
{        
    public HomeController()
    {
        _repo = new Repository();
    }

問題は私に解決されました。


基本クラスで保護されたコンストラクタを使用するときに同じ問題が発生していました-今すぐ明白な解決策のようです!
keithl8041

4

すべての答えは、パラメーターなしのコンストラクターを作成することですが、他の開発者がそれを使用せず、モデルバインダーのみを使用する場合は理想的ではありません。

[Obsolete("For model binding only", true)]別の開発者がこれを使用しようとすると、パブリックコンストラクターの上の属性はコンパイラエラーをスローします。これを見つけるために私は年齢を取りました、それが誰かを助けることを願っています。


完璧-この属性を追加すると、MVCモデルバインディングが実行時に機能し、属性のブール値パラメーターをtrueに設定することで、(コンパイル時に)パラメーターのないコンストラクターをインスタンス化する試みが防止されました。ここでベストアンサー。
Greg Trevellick

3

このエラーが発生しました。コンストラクターでインターフェイスを使用していて、依存関係リゾルバーが解決できませんでした。登録すると、エラーが発生しなくなりました。


新しい質問がある場合は、そのように投稿してください。これは問題への回答を試みないため、コメントまたは新しい質問のいずれかである必要があります。
Nahuel Ianni

2

私も同じ問題を抱えていました...

インターフェイスを使用してDbContext(私のような)への接続を分離する場合は、structuremap.mvc (3または4-nudgetパッケージ)を使用して、コントローラークラスでconstructureを使用できます。これにより、DependencyResolutionフォルダーが作成されます。For <InterfaceClass>()を使用してコメント行を変更し、Use <DbContextClass>()に変更するだけです。


2

これは明らかな場合もありますが、このエラーの原因は、私のMVCメソッドがtypeのプロパティを含むモデルにバインドしていることでしたTuple<>Tuple<>パラメータなしのコンストラクタはありません。


1

私は同じ問題を抱えていましたが、後で新しいインターフェイスと対応するクラスを追加すると、依存関係の注入のためにInitializable Moduleに登録する必要があります。私の場合は次のようにコードの中にありました:

[InitializableModule]
[ModuleDependency(typeof(EPiServer.Web.InitializationModule))]
public class DependencyResolverInitialization : IConfigurableModule
{

    public void ConfigureContainer(ServiceConfigurationContext context)
    {
        context.Container.Configure(ConfigureContainer);
        var structureMapDependencyResolver = new StructureMapDependencyResolver(context.Container);
        DependencyResolver.SetResolver(structureMapDependencyResolver);
        GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerActivator), structureMapDependencyResolver);
    }

    private void ConfigureContainer(ConfigurationExpression container)
    {
        container.For<IAppSettingService>().Use<AppSettingService>();
        container.For<ISiteSettingService>().Use<SiteSettingService>();
        container.For<IBreadcrumbBuilder>().Use<BreadcrumbBuilder>();
        container.For<IFilterContentService>().Use<FilterContentService>().Singleton();
        container.For<IDependecyFactoryResolver>().Use<DependecyFactoryResolver>();
        container.For<IUserService>().Use<UserService>();
        container.For<IGalleryVmFactory>().Use<GalleryVmFactory>();
        container.For<ILanguageService>().Use<LanguageService>();
        container.For<ILanguageBranchRepository>().Use<LanguageBranchRepository>();
        container.For<ICacheService>().Use<CacheService>(); 
        container.For<ISearchService>().Use<SearchService>();
        container.For<IReflectionService>().Use<ReflectionService>();
        container.For<ILocalizationService>().Use<LocalizationService>();
        container.For<IBookingFormService>().Use<BookingFormService>();
        container.For<IGeoService>().Use<GeoService>();
        container.For<ILocationService>().Use<LocationService>();
        RegisterEnterpriseAPIClient(container);
    }

   public void Initialize(InitializationEngine context)
    {
    }

    public void Uninitialize(InitializationEngine context)
    {
    }

    public void Preload(string[] parameters)
    {
    }
}

}


1

私の場合、私のクラスには[Serializable]属性がありました。

クラスが次の場合、パラメーターをとらないコンストラクターが必要です。 [Serializable]


0

このエラーは、クラスをインスタンス化する新しい方法を追加したときに始まりました。

例:

    public class myClass
    {
         public string id{ get; set; }
         public List<string> myList{get; set;}

         // error happened after I added this
         public myClass(string id, List<string> lst)
         {
             this.id= id;
             this.myList= lst;
         }
     }

この変更を加えたときに、パラメーターなしのコンストラクターを追加すると、エラーが解決しました。コンパイラーはデフォルトでパラメーターなしのコンストラクターを作成すると思いますが、独自のコンストラクターを追加する場合は、明示的に作成する必要があります。

    public class myClass
    {
         public string id{ get; set; }
         public List<string> myList{get; set;}

         // error doesn't happen when I add this
         public myClass() { }

         // error happened after I added this, but no longer happens after adding above
         public myClass(string id, List<string> lst)
         {
             this.id= id;
             this.myList= lst;
         }
     }

0

私はDropDownListフォームにを追加しましたが、私の場合、フォームは<form></form>タグの外にあったため、フォームとともに送信されませんでした(そして送信することを意図していませんでした)。

@Html.DropDownList("myField", Model.MyField)

モデルには表示専用のフィールドが含まれていたNo parameterless constructor defined for this objectため、フィールドがまったく送信されなかったため、これもエラーの原因でした。

この場合、excludeバインディングを追加して修正しました。

public ActionResult Foo(int id, int? page, [Bind(Exclude = "MyField")]MyModel model)

0

これは私に起こり、このページの結果は私をさまざまな方向に導いた優れたリソースでしたが、別の可能性を追加したいと思います。

他の返信で述べたように、パラメーター付きのコンストラクターを作成すると、暗黙的なパラメーターなしのコンストラクターが削除されるため、明示的に入力する必要があります。

私の問題は、デフォルトのパラメーターを持つコンストラクターもこの例外をトリガーすることでした。

エラーが発生します:

public CustomerWrapper(CustomerDto customer = null){...}

作品:

public CustomerWrapper(CustomerDto customer){...}
public CustomerWrapper():this(null){}

0

ほとんどの場合、コントローラーにパラメーター化されたコンストラクターがあり、使用している依存関係リゾルバーが依存関係を適切に解決できない場合があります。依存関係リゾルバーメソッドが記述されている場所にブレークポイントを配置する必要があり、内部例外で正確なエラーが発生します。


0

私も同じ問題を抱えていました。

HttpFileCollectionBase filesポストアクションメソッドの引数から削除されHttpFileCollectionBase files = Request.Files;、メソッド本体のように追加されました。


0

DOMAINフォルダー内のモデルにパラメーターなしのコンストラクターを追加し、問題を解決しました。

ここに画像の説明を入力してください

 public User()
        {

        }

-3

そのため、ajax呼び出しを行うときにも、以前にそのメッセージを受け取りました。つまり、基本的に求めているのは、コントローラーによって呼び出されているそのモデルクラスのコンストラクターであり、パラメーターがありません。

ここに例があります

public class MyClass{

     public MyClass(){} // so here would be your parameterless constructor

 }

私はモデルからデフォルトのコンストラクタを削除しました、これは私のために働きます。
Musakkhir Sayyed 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.