ASP.NET MVC: No parameterless constructor defined for this object

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (615)
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未来组装,并将其添加到我的MVC项目中。

在此之后,我无法再加载我的项目。

我的问题不是“你能帮我修一下密码吗?”

相反,我想更了解:

  • 如何解决此问题?
  • 我应该找什么?
  • 根本原因可能是什么?

我想在比现在更深的层次上理解路由和控制器。

提问于
用户回答回答于

如果你的模型使用的是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(..)
}

或者你可以使用别的方法,只需将SelectList替换为IEnDigable,它也适用于MultiSelectList。

 public class MyViewModel
    {
        public Contact SelectedContact { get;set; }
        public IEnumerable<SelectListItem> Contacts { get;set; }
    }
用户回答回答于

我只是遇到了一个类似的问题。相同的异常发生在Model没有无参数的构造函数。

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

System.Web.Mvc.DefaultModelBinder。CreateModel(ControllerContext控制器Context,ModelBindingContext bindingContext,TypeModelType)

以下是一个示例:

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

扫码关注云+社区

领取腾讯云代金券