简体   繁体   English

在mvc中没有为此对象定义无参数构造函数

[英]No parameterless constructor defined for this object in mvc

When I use SelectList in View then i get error "No parameterless constructor defined for this object", I saw many solutions but unable to find that work for me. 当我在View中使用SelectList时,我得到错误“没有为此对象定义无参数构造函数”,我看到了很多解决方案,但无法找到适合我的工作。 This is view code: 这是查看代码:

@using (Html.BeginForm("Product", "Products", FormMethod.Post, new { @class = "form-horizontal" }))
{
   @Html.ValidationSummary()

   <div class="form-group">
       <label class="control-label col-md-3" for="SelectProduct">Select Product</label>
       <div class="col-md-4">
           @Html.DropDownListFor(p => p.SelectProduct, new SelectList(new[] 
           {
             new { Value = "New", Text = "New Entry" },
             new { Value = "Existing", Text = "Existing Entry" },
           }, "Value", "Text"), 
           new { @class = "form-control" })
       </div>
   </div> 
   <div class="form-group">
       <label class="control-label col-md-3" for="productName">Product Name</label>
       <div class="col-md-8">
          @Html.TextBoxFor(u => u.ProductName, new { @class = "form-control", @id = "productName" })
       </div>
   </div>   
}

Controller: 控制器:

[HttpPost]
public ActionResult Product(ProductDto model)
{
    //code here
}

Model: 模型:

public class ProductDto
{
    public ProductDto()
    {
    }
    /// <summary>
    /// Gets or sets whether its New or existing product
    /// </summary>
    public SelectList SelectProduct { get; set; }


    /// <summary>
    /// Gets or sets product name.
    /// </summary>
    public string ProductName { get; set; }

}

Stack Trace: 堆栈跟踪:

[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, StackCrawlMark& stackMark) +119
      System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) +232
     System.Activator.CreateInstance(Type type, Boolean nonPublic) +83
     System.Activator.CreateInstance(Type type) +11
     System.Web.Mvc.DefaultModelBinder.CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType) +183
    System.Web.Mvc.DefaultModelBinder.BindSimpleModel(ControllerContext controllerContext, ModelBindingContext bindingContext, ValueProviderResult valueProviderResult) +329
     System.Web.Mvc.DefaultModelBinder.BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +368
     System.Web.Mvc.DefaultModelBinder.GetPropertyValue(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor, IModelBinder propertyBinder) +17
      System.Web.Mvc.DefaultModelBinder.BindProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor) +384
      System.Web.Mvc.DefaultModelBinder.BindProperties(ControllerContext controllerContext, ModelBindingContext bindingContext) +88
                  System.Web.Mvc.DefaultModelBinder.BindComplexElementalModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Object model) +53
         System.Web.Mvc.DefaultModelBinder.BindComplexModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +1314
        System.Web.Mvc.DefaultModelBinder.BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +416
      System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContext controllerContext, ParameterDescriptor parameterDescriptor) +317
         System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContext controllerContext, ActionDescriptor actionDescriptor) +117
       System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__1e(AsyncCallback asyncCallback, Object asyncState) +446
       System.Web.Mvc.Async.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +130
       System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeAction(ControllerContext controllerContext, String actionName, AsyncCallback callback, Object state) +302
    System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__17(AsyncCallback asyncCallback, Object asyncState) +30
      System.Web.Mvc.Async.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +130
  System.Web.Mvc.Controller.BeginExecuteCore(AsyncCallback callback, Object state) +381
       System.Web.Mvc.Async.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +130
      System.Web.Mvc.Controller.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +317
        System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +17
       System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__2(AsyncCallback asyncCallback, Object asyncState) +71
   System.Web.Mvc.Async.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +130

Thanks 谢谢

DropDownListFor is meant to set a value on a property in your model - your model contains a SelectProduct property which is of type SelectList - I'm guessing it should be of type string since that's the type of the Value property of the SelectList you're building in the view. DropDownListFor用于在模型中的属性上设置一个值 - 您的模型包含一个类型为SelectListSelectProduct属性 - 我猜它应该是string类型,因为这是SelectListValue属性的类型在视图中建设。

public class ProductDto
{
    public ProductDto()
    {
    }
    /// <summary>
    /// Gets or sets whether its New or existing product
    /// </summary>
    public string SelectProduct { get; set; }


    /// <summary>
    /// Gets or sets product name.
    /// </summary>
    public string ProductName { get; set; }

  }

Note that a purer method would be to build the SelectList in the controller or ViewModel rather than in the view. 请注意,更纯粹的方法是在控制器或ViewModel而不是在视图中构建SelectList That way you separate the logic of building the possible values form the view itself. 这样,您就可以从视图本身中分离构建可能值的逻辑。

If SelectList that you use in ProductDto class is System.Web.Mvc.SelectList then it is the cause of your problem. 如果您在ProductDto类中使用的SelectListSystem.Web.Mvc.SelectList那么它是您的问题的原因。 System.Web.Mvc.SelectList does not have parameterless constructor. System.Web.Mvc.SelectList没有无参数构造函数。

@Html.DropDownListFor(p => p.SelectProduct, new SelectList(new[] 

you should change this code. 你应该改变这个代码。

@Html.DropDownListFor(p => p.SelectProductID, new SelectList(new[] 

I used SelectProductID because when you want to use. 我使用SelectProductID是因为你想使用它。 It will fill with Models. 它将填充模型。

So you can selecy only one item your dropdownlist. 所以你只能在你的下拉列表中选择一个项目。

I hope this is usefull for you. 我希望这对你有用。

Thanks. 谢谢。

This Code Will Help You. 本准则将帮助您。 Use This Method . 使用此方法

Htmlcs Htmlcs

@model OspWebsite.Models.bcEvent             
@using (Html.BeginForm())  
@Html.AntiForgeryToken()
  @Html.ValidationSummary(true)
<div class="col-4 ">

    @Html.LabelFor(model => model.eventCountry, new { @class = "col-sm-6  control-label" })   //For Label
    @Html.DropDownList("FeedBack", ViewData["dropdownCountry"] as List<SelectListItem>)     //For DropDown 

 </div>
}

MngClass... MngClass ...

public class MngEvent
{
public DataTable ShowEvent()
    {
        try
        {
          SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ospDB"].ConnectionString);

            SqlCommand cmd = new SqlCommand("usp_SelectAllConfrence", con);
            SqlDataAdapter sda = new SqlDataAdapter();
            DataTable dt = new DataTable();
            cmd.CommandType = CommandType.StoredProcedure;
            if (con.State.Equals(ConnectionState.Closed))
                con.Open();
            sda.SelectCommand = cmd;
            sda.Fill(dt);
            con.Close();
            return dt;

        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
  }

Controller... 控制器...

   public class AdminEventsController : Controller
   {
    [HttpGet]
    public ActionResult addEvent()
    {   
        ////ComboBox Country
        List<SelectListItem> lst = new List<SelectListItem>();
        MngEvent events = new MngEvent();
        DataTable dt1 = events.ShowEvent();
        for (int i = 0; i <= dt1.Rows.Count; i++)
        {
            lst.Add(new SelectListItem { Text = dt1.Rows[i]["ConfrenceCountry"].ToString(), Value = dt1.Rows[i]["ConfrenceID"].ToString() });
        }
        ViewData["dropdownCountry"] = lst;
        return View();
    }
 }

If Any Problem Feedback. 如有任何问题反馈。 Thanks 谢谢

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在MVC中没有为此对象错误定义无参数构造函数 - No parameterless constructor defined for this object error in MVC 没有为此对象MVC4定义无参数的构造函数 - No parameterless constructor defined for this object MVC4 没有为此对象定义无参数构造函数-MVC项目 - No parameterless constructor defined for this object - MVC project 没有为此对象定义无参数构造函数。 MVC 5 - No parameterless constructor defined for this object. MVC 5 没有为此对象定义无参数构造函数 - No parameterless constructor defined for this object ASP.NET MVC 4 + Ninject MVC 3 = 没有为此对象定义无参数构造函数 - ASP.NET MVC 4 + Ninject MVC 3 = No parameterless constructor defined for this object Ajax调用MVC操作方法-没有为此对象定义无参数构造函数 - Ajax calling MVC action method - No parameterless constructor defined for this object 在ASP.NET MVC中没有为此对象定义无参数构造函数 - No parameterless constructor defined for this object in ASP.NET MVC 没有在MVc5回购模式中为此对象定义无参数构造函数 - No parameterless constructor defined for this object in MVc5 Repo pattern System.MissingMethodException:没有为此对象定义的无参数构造函数。 MVC4 - System.MissingMethodException: No parameterless constructor defined for this object. MVC4
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM