ViewModel中的ASP.NET MVC SelectList

 573079756_3618db 发布于 2023-02-12 18:59

我在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);
}

这是视图:

@Html.LabelFor(model => model.person.name, new { @class = "control-label col-md-2" })
@Html.EditorFor(model => model.person.name) @Html.ValidationMessageFor(model => model.person.name)
@Html.LabelFor(model => model.person.address, new { @class = "control-label col-md-2" })
@Html.EditorFor(model => model.person.address) @Html.ValidationMessageFor(model => model.person.address)
@Html.LabelFor(model => model.person.CityID, "CityID", new { @class = "control-label col-md-2" })
@Html.DropDownList("cities") @Html.ValidationMessageFor(model => model.person.CityID)

当用户单击"提交"时,浏览器中会显示以下错误消息:"没有为此对象定义无参数构造函数."

我认为这与我在ViewModel中有一个SelectList的事实有关.我认为当视图在表单提交时将模型传递回控制器时,它会调用SelectList的构造函数,但是没有SelectList的无参数构造函数.我不知道该怎么办.任何帮助表示赞赏!!

1 个回答
  • 我总是使用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)
    

    2023-02-12 19:03 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有