ChatGPT解决这个技术问题 Extra ChatGPT

ASP.NET MVC:没有为此对象定义无参数构造函数

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 项目中。 [注意:这可能是一个红鲱鱼。]

在此之后,我无法再加载我的项目。上面的错误让我感到很冷。

我的问题不是“你能帮我修复我的代码吗?”

相反,我想更广泛地了解:

我应该如何解决这个问题?

我应该寻找什么?

根本原因可能是什么?

看来我应该比现在更深入地了解路由和控制器。


S
SandRock

我只是有一个类似的问题。当 Model 没有无参数构造函数时,也会发生同样的异常。

调用堆栈正在计算一种负责创建模型的新实例的方法。

System.Web.Mvc.DefaultModelBinder.CreateModel(ControllerContext controllerContext,ModelBindingContext bindingContext,类型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
    {
    }
}

将 JSON 数据发布到我的操作时,我遇到了类似的错误。事实证明,我试图绑定的模型没有无参数构造函数!
注意:如果我定义了一个构造函数,而不是一个无参数的构造函数,我只会在序列化过程中遇到这个问题(没有无参数的 bla bla ...)。我的意思是,在这个例子中,如果你删除你定义的构造函数( public MyModel(IHelper helper) {} )问题就消失了......所以每次你创建一个构造函数时,你必须创建一个无参数的......我能理解就像:一旦你开始定义一个构造函数,系统就不会冒险创建“默认对象”,因为它不知道它是否有意义......类似的东西。
元组...也许对于其他来这里的人:如果您的班级中只有元组(例如 Tuple data; ),那么序列化就可以了(因为我在 JSON 序列化过程中遇到了这个问题)...但是如果你使用 List> data;您将开始遇到“无参数构造器”错误。因为 .Net 不能/不创建元组(我没有参考,但 Tuple data = new Tuple(); 不会编译...而 Tuple data = new Tuple("", ""); 没问题。
是的,但是如何将无参数构造函数添加到具有依赖项的类中,并且您想将它们注入构造函数中?这是我没有得到的问题的一部分......
@ToaoG 您的依赖注入库应该为您提供一种选择“注入构造函数”的方法。顺便说一句,在视图模型中进行依赖注入看起来很奇怪。
F
Fernando JS

如果您的模型使用 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; }
    }

我在这上面浪费了很多时间......并且不得不将返回 SelectList 的辅助函数转换为返回 List....blarg 的辅助函数
您可以使用 IEnumerable 并在构造函数中将它们实例化为 new List()
谢谢,这非常有帮助!
5年后仍然有效。谢谢!
我遇到了同样的问题,但使用了 ReadOnlyCollection
M
Martin

您需要与控制器对应的操作没有参数。

您拥有的控制器/动作组合看起来像:

public ActionResult Action(int parameter)
{

}

但你需要

public ActionResult Action()
{

}

此外,请查看 Phil Haack 的 Route Debugger 以排除路由故障。


异常与构造函数有关,与操作方法无关。
@Logrythmik。报告的异常是针对构造函数的,但问题出在操作方法中。我有一个正在工作的类和操作方法,然后向操作方法添加了一个参数,并得到了这个错误。另一种解决方案是为参数提供一个值。或者使参数可选 - 当控制器在 C# 中时这应该可以工作,但它不适用于 F#
此外,如果您正在执行类似@Html.Action("SomeAction", new { myParameter = "42" }) 的操作,请确保您的 Html.Action 调用中的参数名称与在你的行动方法!
s
swilliams

默认情况下,MVC 控制器需要一个不带参数的默认构造函数。最简单的方法是创建一个默认构造函数,使用参数调用该构造函数:

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

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

但是,您可以通过滚动自己的 ControllerFactory 来覆盖此功能。这样您就可以告诉 MVC,当您创建 MyController 时,给它一个 Helper 的实例。

这允许您将依赖注入框架与 MVC 一起使用,并真正解耦一切。 StructureMap website 就是一个很好的例子。整个快速入门很好,他在“自动布线”的底部专门针对 MVC。


我不认为这是正确的答案,@swilliams。这里的关键是部件:为这个对象定义的。这是一条废话错误消息,实际上暗示无法创建传入的输入模型。因此,如果您有一个没有无参数构造函数的输入模型,那么您会收到此错误。很容易认为它与 CONTROLLER 构造函数有关。但事实并非如此。
这是一条废话,如果不是这样的回应,它会让你大吃一惊。多亏了这个答案和上面的回复,我才得以解决问题。我想这是一个不完全了解活页夹在幕后做什么的问题。我认为它只会设置每个属性,但由于某种原因,它在发布时也会在设置之前调用 get。所以因为我重载了我的构造函数并且不得不用一个参数少的构造函数来补偿我不得不考虑我的一些属性得到的空值,这也是出乎意料的。
K
Kaleb Pederson

使用 IDependencyResolver 时也会发生此错误,例如使用 IoC 容器时,并且依赖关系解析器返回 null。在这种情况下,ASP.NET MVC 3 默认使用 DefaultControllerActivator 创建对象。如果正在创建的对象没有公共的无参数构造函数,那么只要提供的依赖解析器返回 null,就会抛出异常。

这是一个这样的堆栈跟踪:

[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

这导致了我的问题:由于异常,我的依赖解析器无法构造我的控制器。它被解析器吞下,返回 null 并且 MVC 框架切换到默认的控制器激活器,导致所描述的错误。
@jmona789 检查您是否在 Global.asax 中设置了所有注入的依赖项。
这是我的问题。在制作我的项目演示时,我仍然有依赖解析器,我需要为演示删除它!
J
Josh Mouch

您可以在 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 中的其他扩展点(例如控制器构造)编写类似的代码。


这就是我想为我的问题做的事情。
希望我能更多地支持这个。为我节省了几分钟以上的时间。
H
Hammad Khan

我得到了同样的错误,在我的例子中,罪魁祸首是既不是公共也不是私有的构造函数。

没有为此对象定义无参数构造函数。异常详细信息:System.MissingMethodException:没有为此对象定义无参数构造函数。

复制代码:确保构造函数之前有 public。

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

    public string name
    {
        get;
        set;
    }
}

请注意,在构造函数中缺少访问修饰符默认为编译器中的“内部”。
放在那里“私人”修饰符不会解决问题。
D
Dan B

http://tekpub.com/conferences/mvcconf 上的第一个视频

47:10 分钟显示错误并显示如何覆盖默认 ControllerFactory。即创建结构图控制器工厂。

基本上,您可能正在尝试实现依赖注入?

问题在于接口依赖性。


您可以从 MVC Storefront 项目中获取 StructureMapControllerFactory 类
N
Nestor

我在以下情况下遇到了同样的错误:

使用自定义 ModelView,两个操作(GET 和 POST)都在传递包含两个对象的 ModelView:

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

并且 POST 也接受相同的模型视图:

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

问题是 View 收到了 ModelView (需要产品和类别信息列表),但提交后只返回 Product 对象,但是由于 POST Add 预期 ProductModelView 它传递了一个 NULL 但是 ProductModelView 唯一的构造函数需要两个参数( Product, RootCategories),然后它试图为这个 NULL 情况找到另一个没有参数的构造函数,然后失败并显示“没有参数......”

因此,修复 POST Add 如下解决问题:

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

希望这可以帮助某人(我花了将近半天的时间才找到这个!)。


内斯特,这很有启发性,似乎是正确的。但是为什么视图返回一个不同的对象然后它正在接收,即一个产品对象而不是产品视图模型?
哦,这是针对我的情况的,因为我只需要保留产品的数据,将 RootCategories 传递给视图只是为了打印出来,没有对其进行任何输入,因此它们的值(RootCategories)没有保存在 或其他任何地方。我是否需要保持相同的 ViewModel,我会使用表单 、视图数据或其他东西来坚持。
GilShalit,今天我找到了答案(对不起,我慢!),查看呈现的 HTML 我看到输入取了 [ObjectName].[Property] 的名称,但没有原始 ViewModel 的痕迹,所以你只能检索每个个体ViewModel 中的对象,但不是完整的 ViewModel 本身。示例:如果您的 ProductViewModel vm 有内部对象 Product p 和 Category c,那么您的 GET 控制器将一个模型 vm 发送到 View,那么您的 POST 控制器只能接受(Product p,Category c)之类的参数,但不能接受 vm。 ..如果我错了,将不胜感激一些反馈。
A
Anonymous

我也一样。我的问题出现了,因为我忘记了我的基本模型类已经具有在视图中定义的名称的属性。

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 请求出现“无参数构造函数”错误。

希望有帮助。


y
yoel halb

我有一个类似的问题,基本上问题是在操作方法中有一些参数不是由模型绑定过程提供的,(换句话说,这些字段不是由提交页面提交的)。

即使提供了除一个以外的所有参数,并且即使缺少的参数是可空类型,也会出现此问题。

问题也可能是拼写错误的结果,其中参数的名称和表单字段的名称将不相同。

解决方案是 1) 验证名称是否匹配 2) 为参数提供默认值 3) 或提供另一个没有此参数的操作方法。


谢谢@yo hal,你的答案原来是解决我这个错误的特定实例的答案。在这种情况下,框架吐出的错误消息恰好是最没用的错误消息。
B
Brik

我也有这个问题,我想我会分享,因为我在上面找不到我的问题。

这是我的代码

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

调用此 ActionResult:

public ActionResult Overview(int id)

我认为它足够聪明,可以弄清楚我传递给它的值是 Overview 的 id 参数,但事实并非如此。这修复了它:

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


M
Muru Bakthavachalam

由于没有无参数的公共构造函数,我得到了同样的异常

代码是这样的:

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

变成

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

问题解决了我。


在基类中使用受保护的构造函数时我遇到了同样的问题 - 现在似乎是一个明显的解决方案!
M
Martin Dawson

所有答案都说要创建一个无参数的构造函数,如果您不希望任何其他开发人员使用它而只使用模型绑定器,这并不理想。

如果另一个开发人员尝试使用它,公共构造函数上方的属性 [Obsolete("For model binding only", true)] 将引发编译器错误。我花了很长时间才找到这个,希望它对某人有所帮助。


完美 - 添加此属性允许 MVC 模型绑定在运行时工作,并将属性的布尔参数设置为 true 防止(在编译时)任何实例化无参数构造函数的尝试。最佳答案在这里。
A
Ahmed

我得到了这个错误。我在构造函数中使用了接口,而我的依赖解析器无法解析,当我注册它时,错误就消失了。


如果您有新问题,请照此发布。这应该是评论或新问题,因为它不会尝试回答问题。
J
JeppePepp

我有同样的问题...

如果您使用接口将连接与 DbContext 解耦(像我一样),您可以使用 structuremap.mvc(3 或 4 - nudget 包)能够在控制器类中使用构造。这将为您提供一个 DependencyResolution 文件夹。只需将注释行更改为 For< InterfaceClass >() 和 Use< DbContextClass >()。


T
Tyler Forsythe

虽然这对某些人来说可能很明显,但对我来说,这个错误的罪魁祸首是我的 MVC 方法绑定到一个包含 Tuple<> 类型属性的模型。 Tuple<> 没有无参数构造函数。


N
Niyazi Ozturk

由于缺少依赖注入器/解析器容器和/或缺少绑定,可能会出现此类型错误

使用 NugetPacketManager(Unity、Ninject 或任何您喜欢的)将依赖注入器添加到您的项目中,为类添加接口绑定和具体实现

UnityMConfig.cs

using System;
using Unity;
using <your_namespace for the interfaces and concrete classes>

namespace <your_namespace>
{
    public static class UnityConfig
    {
        private static Lazy<IUnityContainer> container =
            new Lazy<IUnityContainer>(() =>
            {
                var container = new UnityContainer();
                RegisterTypes(container);
                return container;
            });

        public static IUnityContainer Container => container.Value;

        public static void RegisterTypes(IUnityContainer container)
        {
            container.RegisterType <IInterfaceClassName, ConcreteImplementationOfInterface> ();
        }
    }
}

UnityMvcActivator.cs

using System.Linq;
using System.Web.Mvc;
using Unity.AspNet.Mvc;

[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(xxxx.UnityMvcActivator), nameof(xxxx.UnityMvcActivator.Start))]
[assembly: WebActivatorEx.ApplicationShutdownMethod(typeof(xxxx.UnityMvcActivator), nameof(xxxx.UnityMvcActivator.Shutdown))]

namespace <your_namespace>
{
    public static class UnityMvcActivator
    {
        public static void Start()
        {
            FilterProviders.Providers.Remove(FilterProviders.Providers.OfType<FilterAttributeFilterProvider>().First());
            FilterProviders.Providers.Add(new UnityFilterAttributeFilterProvider(UnityConfig.Container));
            DependencyResolver.SetResolver(new UnityDependencyResolver(UnityConfig.Container));
        }
        public static void Shutdown()
        {
            UnityConfig.Container.Dispose();
        }
    }
}

a
arokanika

我有同样的问题,但后来发现添加任何新接口和相应的类都需要在 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)
    {
    }
}

}


K
Kellen Stuart

就我而言,我的班级具有 [Serializable] 属性。

如果您的类是 [Serializable],则您需要有一个不带参数的构造函数


j
jizhihaoSAMA

我在 DOMAIN 文件夹内的模型中添加了一个无参数的构造函数,问题就解决了。

https://i.stack.imgur.com/Kf7H3.png

 public User()
        {

        }

f
fribeiroc

尝试在 DbContext 类上添加迁移时遇到了同样的问题。

首先我得到了错误:无法创建“ContextDb”类型的对象。有关设计时支持的不同模式,请参阅https://go.microsoft.com/fwlink/?linkid=851728

这让我添加了接口 IDesignTimeDbContextFactory 并实现了它的功能:

public ContextDb CreateDbContext(string[] args)
    {
        var optionBuilder = new DbContextOptionsBuilder<ContextDb>();
        optionBuilder.UseSqlServer("Server_connection");
        return new ContextDb(optionBuilder.Options);
    }

此时再次尝试添加迁移时发生错误 No parameterless constructor defined for type 'LibraryContext.ContextDb'。这是由于在 CreateDbContext() 中创建的 ContextDb 的新实例而发生的。为了解决这个问题,我刚刚添加了一个空构造函数:

public ContextDb()     
    {
    }

c
chuck

当我添加一种实例化类的新方法时,这个错误就开始了。

例子:

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

S
SilverlightFox

我在表单中添加了一个 DropDownList,但在我的情况下,它没有(也不打算)与表单一起提交,因为它位于 <form></form> 标记之外:

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

由于模型包含仅用于显示的字段,因此这也导致了 No parameterless constructor defined for this object 错误,因为该字段根本没有提交。

在这种情况下,我通过添加排除绑定来修复它:

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

B
Bendik August Nesbø

这发生在我身上,这个页面上的结果是一个很好的资源,引导了我很多方向,但我想添加另一种可能性:

如其他回复中所述,创建带参数的构造函数会删除隐式无参数构造函数,因此您必须显式键入它。

我的问题是具有默认参数的构造函数也触发了此异常。

给出错误:

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

作品:

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

M
Mahendra Savale

很可能您的控制器中可能有参数化构造函数,并且您使用的任何依赖解析器都无法正确解析依赖。您需要在编写依赖解析器方法的地方放置断点,您将在内部异常中得到确切的错误。


K
Khaan

我有同样的问题。

刚刚从 Post Action 方法参数中删除了 HttpFileCollectionBase files,并在方法主体中添加了 HttpFileCollectionBase files = Request.Files;


C
Carla

因此,在进行 ajax 调用时,我也收到了该消息。所以它基本上要求的是由控制器调用的模型类中的构造函数,没有任何参数。

这是一个例子

public class MyClass{

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

 }

我从模型中删除了默认构造函数,这对我有用。

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅