[英]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
用于在模型中的属性上设置一个值 - 您的模型包含一个类型为SelectList
的SelectProduct
属性 - 我猜它应该是string
类型,因为这是SelectList
的Value
属性的类型在视图中建设。
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
类中使用的SelectList
是System.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.