ViewModel 中的 ASP.NET MVC SelectList

2024-01-09

我正在使用 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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ViewModel 中的 ASP.NET MVC SelectList 的相关文章

随机推荐