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: }
Estaba siguiendo el libro de Steven Sanderson ' Pro ASP.NET MVC Framework '. En la página 132, de acuerdo con la recomendación del autor, descargué el ensamblaje de ASP.NET MVC Futures y lo agregué a mi proyecto MVC. [Nota: Esto podría ser un arenque rojo.]
Después de esto, ya no podía cargar mi proyecto. El error anterior me detuvo en frío.
Mi pregunta no es , "¿Podrías ayudarme a arreglar mi código?"
En cambio, me gustaría saber más en general:
- ¿Cómo debo solucionar este problema?
- ¿Qué debería estar buscando?
- ¿Cuál podría ser la causa raíz?
Parece que debería entender el enrutamiento y los controladores a un nivel más profundo que ahora.
Esto también puede ser causado si su Modelo está usando una Lista de Selección, ya que no tiene un constructor sin parámetros :
Tendrá que refactorizar su modelo para hacerlo de otra manera si esta es la causa. Entonces, usando
IEnumerable<Contact>
y escribiendo un método de extensión que crea la lista desplegable con las diferentes definiciones de propiedades:O puede usar el enfoque @Mark y @krilovich, solo necesita reemplazar SelectList por IEnumerable, también funciona con MultiSelectList.
fuente
Necesita la acción que corresponde al controlador para no tener un parámetro.
Parece que para la combinación de controlador / acción que tiene:
pero tu necesitas
Además, consulte el Depurador de rutas de Phil Haack para solucionar problemas de rutas.
fuente
Por defecto, los controladores MVC requieren un constructor predeterminado sin parámetros. Lo más sencillo sería crear un constructor predeterminado que llame al que tiene parámetros:
Sin embargo, puede anular esta funcionalidad haciendo rodar la suya
ControllerFactory
. De esta manera puede decirle a MVC que cuando está creandoMyController
una instancia deHelper
.Esto le permite utilizar marcos de inyección de dependencia con MVC y realmente desacoplar todo. Un buen ejemplo de esto ha terminado en el sitio web de StructureMap . Todo el inicio rápido es bueno, y se vuelve específico para MVC en la parte inferior en "Auto Wiring".
fuente
Este error también ocurre cuando se usa un IDependencyResolver , como cuando se usa un contenedor IoC, y el solucionador de dependencias devuelve nulo. En este caso, ASP.NET MVC 3 usa de manera predeterminada el DefaultControllerActivator para crear el objeto. Si el objeto que se está creando no tiene un constructor público sin argumentos, se generará una excepción cada vez que el solucionador de dependencias devuelto sea nulo.
Aquí hay uno de esos rastros de pila:
fuente
Puede obtener esta excepción en muchos lugares diferentes en el marco MVC (por ejemplo, no puede crear el controlador, o no puede crear un modelo para darle ese controlador).
La única manera fácil que he encontrado para diagnosticar este problema es anular MVC lo más cerca posible de la excepción con su propio código. Luego, su código se romperá dentro de Visual Studio cuando ocurra esta excepción, y puede leer el Tipo que causa el problema desde el seguimiento de la pila.
Esto parece una forma horrible de abordar este problema, pero es muy rápido y muy consistente.
Por ejemplo, si se produce este error dentro de MVC DefaultModelBinder (que sabrá al verificar el seguimiento de la pila), reemplace DefaultModelBinder con este código:
Y actualice su Global.asax.cs:
Ahora, la próxima vez que obtenga esa excepción, Visual Studio se detendrá dentro de su clase MyDefaultModelBinder, y puede verificar la propiedad "modelType" para ver qué tipo causó el problema.
El ejemplo anterior funciona solo cuando se obtiene la excepción "No se ha definido ningún constructor sin parámetros para este objeto" durante el enlace del modelo. Pero se puede escribir un código similar para otros puntos de extensión en MVC (por ejemplo, construcción del controlador).
fuente
Obtuve el mismo error, el culpable en mi caso fue el constructor que no era público ni privado .
Código de reproducción: asegúrese de que el constructor tenga público antes.
fuente
Primer video en http://tekpub.com/conferences/mvcconf
47:10 minutos muestra el error y muestra cómo anular el ControllerFactory predeterminado. Es decir, crear la estructura del controlador del mapa de fábrica.
Básicamente, ¿probablemente intentas implementar la inyección de dependencia?
El problema es que es la dependencia de la interfaz.
fuente
Recibí el mismo error cuando:
Usando un ModelView personalizado, ambas acciones (GET y POST) pasaban el ModelView que contenía dos objetos:
Y la POST también acepta la misma vista de modelo:
El problema era que la Vista recibió el ModelView (necesitaba información sobre el producto y la lista de categorías), pero después de enviarlo, solo devolvía el objeto Product, pero como POST Add esperaba un ProductModelView, pasó un NULL pero luego el constructor solo ProductModelView necesitó dos parámetros ( Product, RootCategories), luego trató de encontrar otro constructor sin parámetros para este caso NULL y luego falla con "sin parámetros ..."
Entonces, arreglando el POST Add de la siguiente manera corrige el problema:
Espero que esto pueda ayudar a alguien (¡pasé casi medio día para descubrirlo!).
fuente
Lo mismo para mi. Mi problema apareció porque olvidé que mi clase de modelo base ya tiene una propiedad con el nombre que se definió en la vista .
... y modelo de procesamiento del controlador:
Nada especial, ¿verdad? Pero luego defino la vista ...
... que causa el error "Constructor sin parámetros" en la solicitud POST.
Espero que ayude.
fuente
Tuve un problema similar, y básicamente el punto es que hay algunos argumentos en el método de acción que no fueron proporcionados por el proceso de Enlace de modelo (y en otras palabras, estos campos no fueron enviados por la página de envío).
Este problema surgirá incluso si se proporcionan todos los argumentos menos uno, e incluso si el que falta es de tipo anulable.
El problema también podría ser el resultado de un error tipográfico, en el que el nombre del argumento y el nombre del campo del formulario no serán idénticos.
La solución es 1) verificar que los nombres coincidan 2) proporcionar un valor predeterminado para el argumento 3) o proporcionar otro método de acción sin este argumento.
fuente
También tuve este problema y pensé en compartirlo ya que no puedo encontrar mi problema arriba.
Este era mi código
return RedirectToAction("Overview", model.Id);
Llamando a este ActionResult:
public ActionResult Overview(int id)
Supuse que sería lo suficientemente inteligente como para darse cuenta de que el valor que le paso es el parámetro id para Overview, pero no lo es. Esto lo solucionó:
return RedirectToAction("Overview", new {id = model.Id});
fuente
Obtuve la misma excepción debido a que no había un constructor público sin parámetros
El código era así:
cambiado a
Problema resuelto para mí.
fuente
Todas las respuestas dicen crear un constructor menos parámetros que no es ideal si no quieres que otros desarrolladores lo usen y solo el modelo de carpeta.
El atributo
[Obsolete("For model binding only", true)]
sobre un constructor público arrojará un error de compilación si otro desarrollador intenta usar esto. Me llevó años encontrar esto, espero que ayude a alguien.fuente
Tengo este error Estaba usando interfaces en mi constructor y mi solucionador de dependencias no pudo resolver, cuando lo registré, el error desapareció.
fuente
Yo tuve el mismo problema...
Si usa una interfaz para desacoplar su conexión con su DbContext (como yo), puede usar structuremap.mvc (paquete de 3 o 4 nudget ) para poder usar una estructura en su clase de controlador. Esto le dará una carpeta DependencyResolution. Simplemente cambie la línea comentada con su For <InterfaceClass> () y Use <DbContextClass> ().
fuente
Si bien esto puede ser obvio para algunos, el culpable de este error para mí fue que mi método MVC estaba vinculado a un modelo que contenía una propiedad de tipo
Tuple<>
.Tuple<>
no tiene constructor sin parámetros.fuente
Tuve el mismo problema, pero luego encontré que agregar una nueva interfaz y la clase correspondiente requiere que se registre en el Módulo Inicializable para la inyección de dependencia. En mi caso, estaba dentro del código de la siguiente manera:
}
fuente
En mi caso, mi clase tenía el
[Serializable]
atributo.Debe tener un constructor que no tome parámetros si su clase es
[Serializable]
fuente
Este error comenzó cuando agregué una nueva forma de crear una instancia de una clase.
Ejemplo:
El error se resolvió cuando agregué cuando hice este cambio, agregando un constructor sin parámetros. Creo que el compilador crea un constructor sin parámetros por defecto, pero si agrega el suyo, debe crearlo explícitamente.
fuente
Agregué una
DropDownList
a mi formulario, sin embargo, en mi caso, no se envió (y no se pretendía) con el formulario ya que estaba fuera de las<form></form>
etiquetas:Como el Modelo contenía el campo solo para visualización, esto también causó el
No parameterless constructor defined for this object
error porque el campo no se envió en absoluto.En este caso lo arreglé agregando un enlace de exclusión:
fuente
Esto me sucedió a mí, y los resultados en esta página fueron un buen recurso que me condujo en muchas direcciones, pero me gustaría agregar otra posibilidad:
Como se indicó en otras respuestas, la creación de un constructor con parámetros elimina el constructor implícito sin parámetros, por lo que debe escribirlo explícitamente.
Mi problema fue que un constructor con parámetros predeterminados también activó esta excepción.
Da errores:
Trabajos:
fuente
Lo más probable es que tenga un constructor parametrizado en su controlador y cualquier solucionador de dependencias que esté utilizando no pueda resolver la dependencia correctamente. Debe poner el punto de interrupción donde se escribe el método de resolución de dependencias y obtendrá el error exacto en la excepción interna.
fuente
Yo tuve el mismo problema.
Solo se eliminó
HttpFileCollectionBase files
del argumento del método Post Action y se agregó comoHttpFileCollectionBase files = Request.Files;
en el cuerpo del método.fuente
Agregué un constructor sin parámetros al modelo dentro de la carpeta DOMAIN, y el problema está resuelto.
fuente
Así que también recibí ese mensaje antes, al hacer una llamada ajax. Entonces, lo que básicamente está pidiendo es un constructor en esa clase de modelo que está siendo llamado por el controlador, no tiene ningún parámetro.
Aquí hay un ejemplo
fuente