[英]No parameterless constructor defined for this object in mvc
當我在View中使用SelectList時,我得到錯誤“沒有為此對象定義無參數構造函數”,我看到了很多解決方案,但無法找到適合我的工作。 這是查看代碼:
@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>
}
控制器:
[HttpPost]
public ActionResult Product(ProductDto model)
{
//code here
}
模型:
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; }
}
堆棧跟蹤:
[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
謝謝
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; }
}
請注意,更純粹的方法是在控制器或ViewModel
而不是在視圖中構建SelectList
。 這樣,您就可以從視圖本身中分離構建可能值的邏輯。
如果您在ProductDto
類中使用的SelectList
是System.Web.Mvc.SelectList
那么它是您的問題的原因。 System.Web.Mvc.SelectList
沒有無參數構造函數。
@Html.DropDownListFor(p => p.SelectProduct, new SelectList(new[]
你應該改變這個代碼。
@Html.DropDownListFor(p => p.SelectProductID, new SelectList(new[]
我使用SelectProductID是因為你想使用它。 它將填充模型。
所以你只能在你的下拉列表中選擇一個項目。
我希望這對你有用。
謝謝。
本准則將幫助您。 使用此方法 。
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 ...
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;
}
}
}
控制器...
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();
}
}
如有任何問題反饋。 謝謝
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.