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: }
Saya mengikuti buku ' Pro ASP.NET MVC Framework ' karya Steven Sanderson . Pada halaman 132, sesuai dengan rekomendasi penulis, saya mengunduh perakitan ASP.NET MVC Futures, dan menambahkannya ke proyek MVC saya. [Catatan: Ini bisa jadi herring merah.]
Setelah ini, saya tidak bisa lagi memuat proyek saya. Kesalahan di atas menghentikan saya dengan dingin.
Pertanyaan saya bukan , "Bisakah Anda membantu saya memperbaiki kode saya?"
Sebagai gantinya, saya ingin tahu lebih umum:
- Bagaimana saya memecahkan masalah ini?
- Apa yang harus saya cari?
- Apa yang mungkin menjadi penyebab root?
Sepertinya saya harus memahami perutean dan pengontrol di tingkat yang lebih dalam daripada yang saya lakukan sekarang.
Ini juga dapat disebabkan jika Model Anda menggunakan SelectList, karena ini tidak memiliki konstruktor tanpa parameter :
Anda harus memperbaiki model Anda untuk melakukannya dengan cara yang berbeda jika ini penyebabnya. Jadi menggunakan
IEnumerable<Contact>
dan menulis metode ekstensi yang membuat daftar drop-down dengan definisi properti yang berbeda:Atau Anda dapat menggunakan pendekatan @Mark dan @krilovich, hanya perlu mengganti SelectList ke IEnumerable, ini juga berfungsi dengan MultiSelectList.
sumber
Anda memerlukan tindakan yang sesuai dengan controller untuk tidak memiliki parameter.
Sepertinya untuk kombinasi pengontrol / tindakan yang Anda miliki:
tapi kamu butuh
Juga, periksa Rute Debugger Phil Haack untuk memecahkan masalah rute.
sumber
Secara default, Pengendali MVC memerlukan konstruktor default tanpa parameter. Yang paling sederhana adalah membuat konstruktor default yang memanggil satu dengan parameter:
Namun, Anda dapat mengganti fungsi ini dengan menggulirkan fungsi Anda sendiri
ControllerFactory
. Dengan cara ini Anda bisa memberi tahu MVC bahwa ketika Anda membuat sebuahMyController
beri contohHelper
.Ini memungkinkan Anda untuk menggunakan kerangka kerja Ketergantungan Injeksi dengan MVC, dan benar-benar memisahkan segalanya. Contoh yang baik untuk ini adalah di situs web StructureMap . Seluruh quickstart baik, dan ia mendapatkan spesifik untuk MVC ke bagian bawah di "Pengkabelan Otomatis".
sumber
Kesalahan ini juga terjadi ketika menggunakan IDependencyResolver , seperti saat menggunakan wadah IoC , dan resolver dependensi mengembalikan nol. Dalam hal ini ASP.NET MVC 3 secara default menggunakan DefaultControllerActivator untuk membuat objek. Jika objek yang dibuat tidak memiliki konstruktor no-args publik, maka pengecualian akan dilemparkan setiap saat resolver dependensi yang disediakan telah kembali nol.
Berikut ini satu jejak tumpukan:
sumber
Anda bisa mendapatkan pengecualian ini di banyak tempat berbeda dalam kerangka kerja MVC (mis. Ia tidak bisa membuat controller, atau tidak bisa membuat model untuk memberikan controller itu).
Satu-satunya cara mudah yang saya temukan untuk mendiagnosis masalah ini adalah dengan mengganti MVC sedekat mungkin dengan kode Anda sendiri. Kemudian kode Anda akan masuk ke dalam Visual Studio ketika pengecualian ini terjadi, dan Anda bisa membaca tipe yang menyebabkan masalah dari tumpukan jejak.
Ini sepertinya cara yang mengerikan untuk mendekati masalah ini, tetapi sangat cepat, dan sangat konsisten.
Misalnya, jika kesalahan ini terjadi di dalam MVC DefaultModelBinder (yang akan Anda ketahui dengan memeriksa jejak stack), kemudian ganti DefaultModelBinder dengan kode ini:
Dan perbarui Global.asax.cs Anda:
Sekarang saat berikutnya Anda mendapatkan pengecualian itu, Visual Studio akan berhenti di dalam kelas MyDefaultModelBinder Anda, dan Anda dapat memeriksa properti "modelType" untuk melihat jenis apa yang menyebabkan masalah.
Contoh di atas berfungsi ketika Anda mendapatkan pengecualian "Tidak ada konstruktor tanpa parameter yang ditentukan untuk objek ini", hanya selama pengikatan model. Tetapi kode yang serupa dapat ditulis untuk titik ekstensi lain di MVC (misalnya konstruksi pengontrol).
sumber
Saya mendapat kesalahan yang sama, pelakunya dalam kasus saya adalah konstruktor yang tidak publik maupun pribadi .
Kode repro: Pastikan konstruktor memiliki publik sebelumnya.
sumber
Video pertama di http://tekpub.com/conferences/mvcconf
47:10 menit dalam menunjukkan kesalahan dan menunjukkan cara menimpa ControllerFactory default. Yaitu untuk membuat pabrik pengontrol peta struktur.
Pada dasarnya, Anda mungkin mencoba menerapkan injeksi ketergantungan ??
Masalahnya adalah ketergantungan antarmuka.
sumber
Saya mendapat kesalahan yang sama ketika:
Menggunakan ModelView khusus, kedua Tindakan (GET dan POST) melewati ModelView yang berisi dua objek:
Dan POST juga menerima tampilan model yang sama:
Masalahnya adalah View menerima ModelView (diperlukan informasi produk dan daftar kategori), tetapi setelah dikirimkan hanya mengembalikan objek Produk, tetapi karena Tambah POST diharapkan ProductModelView melewati NULL tetapi konstruktor ProductModelView hanya membutuhkan dua parameter ( Product, RootCategories), kemudian mencoba mencari konstruktor lain tanpa parameter untuk case NULL ini kemudian gagal dengan "no parameterles ..."
Jadi, memperbaiki POST Add sebagai berikut, perbaiki masalah:
Semoga ini bisa membantu seseorang (saya menghabiskan hampir setengah hari untuk mencari tahu!).
sumber
Hal yang sama untukku. Masalah saya muncul karena saya lupa bahwa kelas model dasar saya sudah memiliki properti dengan nama yang didefinisikan dalam tampilan .
... dan model pemrosesan pengontrol:
Tidak ada yang istimewa, bukan? Tapi kemudian saya mendefinisikan tampilan ...
... yang menyebabkan kesalahan "Parameterless constructor" pada permintaan POST.
Semoga itu bisa membantu.
sumber
Saya memiliki masalah yang sama, dan pada dasarnya intinya adalah bahwa ada beberapa argumen dalam metode tindakan yang tidak disediakan oleh proses Model Binding, (dan dengan kata lain bidang ini tidak diserahkan oleh halaman pengiriman).
Masalah ini akan muncul bahkan jika semua argumen kecuali satu disediakan, dan bahkan jika yang hilang adalah tipe nullable.
Masalahnya mungkin juga merupakan hasil dari salah ketik, di mana nama argumen dan nama bidang formulir tidak akan sama.
Solusinya adalah 1) memverifikasi bahwa nama cocok 2) memberikan nilai default untuk argumen 3) atau memberikan metode tindakan lain tanpa argumen ini.
sumber
Saya memiliki masalah ini juga dan berpikir saya akan berbagi karena saya tidak dapat menemukan masalah saya di atas.
Ini adalah kode saya
return RedirectToAction("Overview", model.Id);
Memanggil ActionResult ini:
public ActionResult Overview(int id)
Saya berasumsi akan cukup pintar untuk mengetahui bahwa nilai yang saya berikan adalah parameter id untuk Tinjauan, tetapi tidak. Ini memperbaikinya:
return RedirectToAction("Overview", new {id = model.Id});
sumber
Saya mendapat pengecualian yang sama karena tidak ada konstruktor publik tanpa parameter
Kode seperti ini:
diubah menjadi
masalah terselesaikan bagi saya.
sumber
Semua jawaban mengatakan untuk membuat parameter lebih sedikit konstruktor yang tidak ideal jika Anda tidak ingin pengembang lain menggunakannya dan hanya pengikat model.
Atribut di
[Obsolete("For model binding only", true)]
atas konstruktor publik akan menimbulkan kesalahan kompilator jika pengembang lain mencoba menggunakan ini. Butuh waktu lama bagi saya untuk menemukan ini, semoga membantu seseorang.sumber
Saya mendapat kesalahan ini. Saya menggunakan antarmuka di konstruktor saya dan resolver dependensi saya tidak dapat menyelesaikan, ketika saya mendaftar maka kesalahan hilang.
sumber
Saya memiliki masalah yang sama ...
Jika Anda menggunakan antarmuka untuk memisahkan koneksi Anda terhadap DbContext Anda (seperti saya), Anda dapat menggunakan structuremap.mvc (paket 3 atau 4 - nudget ) untuk dapat menggunakan konstruksi di kelas controller Anda. Ini akan memberi Anda folder DependencyResolution. Cukup ganti baris yang dikomentari dengan For <InterfaceClass> () dan Menggunakan <DbContextClass> ().
sumber
Meskipun ini mungkin jelas bagi sebagian orang, penyebab kesalahan ini bagi saya adalah metode MVC saya mengikat pada model yang berisi properti tipe
Tuple<>
.Tuple<>
tidak memiliki konstruktor tanpa parameter.sumber
Saya memiliki masalah yang sama tetapi kemudian menemukan menambahkan antarmuka baru dan kelas yang sesuai mengharuskannya untuk terdaftar di Modul Initializable untuk injeksi ketergantungan. Dalam kasus saya, itu di dalam kode sebagai berikut:
}
sumber
Dalam kasus saya, kelas saya memiliki
[Serializable]
atribut.Anda diharuskan memiliki konstruktor yang tidak memiliki parameter jika kelas Anda
[Serializable]
sumber
Kesalahan ini dimulai untuk saya ketika saya menambahkan cara baru untuk membuat instance kelas.
Contoh:
Kesalahan teratasi ketika saya menambahkan ketika saya melakukan perubahan ini, menambahkan konstruktor tanpa parameter. Saya percaya kompiler membuat konstuktor tanpa parameter secara default, tetapi jika Anda menambahkan sendiri maka Anda harus membuatnya secara eksplisit.
sumber
Saya telah menambahkan
DropDownList
ke formulir saya, namun dalam kasus saya itu tidak (dan tidak dimaksudkan untuk) dikirimkan dengan formulir karena di luar<form></form>
tag:Karena Model hanya berisi bidang untuk tampilan, ini juga menyebabkan
No parameterless constructor defined for this object
kesalahan karena bidang tidak dikirimkan sama sekali.Dalam hal ini saya memperbaikinya dengan menambahkan pengecualian yang mengikat:
sumber
Ini terjadi pada saya, dan hasil pada halaman ini adalah sumber yang bagus yang membawa saya ke berbagai arah, tetapi saya ingin menambahkan kemungkinan lain:
Seperti yang dinyatakan dalam balasan lain, membuat konstruktor dengan parameter menghapus konstruktor tanpa parameter implisit, jadi Anda harus mengetiknya secara eksplisit.
Apa masalah saya adalah bahwa konstruktor dengan parameter default juga memicu pengecualian ini.
Memberikan kesalahan:
Bekerja:
sumber
Kemungkinan besar Anda mungkin memiliki konstruktor parameter di pengontrol Anda dan pemecah ketergantungan apa pun yang Anda gunakan tidak dapat menyelesaikan ketergantungan dengan benar. Anda harus meletakkan break-point di mana metode penyelesaian ketergantungan ditulis dan Anda akan mendapatkan kesalahan yang tepat dalam pengecualian dalam.
sumber
Saya memiliki masalah yang sama.
Baru Dihapus
HttpFileCollectionBase files
dari argumen metode Pasca Tindakan dan ditambahkan sepertiHttpFileCollectionBase files = Request.Files;
di badan metode.sumber
Saya menambahkan konstruktor tanpa parameter ke model di dalam Folder DOMAIN, dan masalahnya terpecahkan.
sumber
Jadi saya mendapatkan pesan itu sebelumnya, ketika melakukan panggilan ajax. Jadi pada dasarnya yang diminta adalah konstruktor di kelas model yang dipanggil oleh contoller, tidak memiliki parameter apa pun.
Berikut ini sebuah contoh
sumber