我正在使用ASP.NET MVC 5(但这很可能也适用于以前的版本)。提出此问题的最佳方法是向您显示代码:
这是视图模型:
public class PersonCreateViewModel
{
public SelectList cities {get; set;}
public String Name { get; set; }
public String Address { get; set; }
}
这是控制器的http Post方法:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(PersonCreateViewModel viewmodel)
{
if (ModelState.IsValid)
{
//Add to database here and return
}
//return back to view if invalid db save
return View(person);
}
这是视图:
<div class="form-group">
@Html.LabelFor(model => model.person.name, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.person.name)
@Html.ValidationMessageFor(model => model.person.name)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.person.address, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.person.address)
@Html.ValidationMessageFor(model => model.person.address)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.person.CityID, "CityID", new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("cities")
@Html.ValidationMessageFor(model => model.person.CityID)
</div>
</div>
当用户单击“提交”时,浏览器中将显示以下错误消息:“没有为此对象定义无参数的构造函数。”
我认为这与我的ViewModel中有一个SelectList有关。我认为,当视图在表单提交时将模型传递回控制器时,它将调用SelectList的构造函数,但是SelectList没有无参数的构造函数。我不确定如何进行。任何帮助表示赞赏!
我一直使用IEnumerable运气更好
public class PersonCreateViewModel
{
public IEnumerable<SelectListItem> cities {get; set;}
public int CityId { get; set; }
public String Name { get; set; }
public String Address { get; set; }
}
此外,您将需要在视图模型上具有一个属性来捕获所选值,例如CityId。
然后,您可以使用:
Html.DropDownListFor(m => m.CityId, Model.cities)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句