asp.net-mvc - ViewModel中的ASP.NET MVC SelectList

标签 asp.net-mvc asp.net-mvc-4

我正在使用ASP.NET MVC 5(但这很可能也适用于以前的版本)。提出此问题的最佳方法是向您显示代码:

这是 View 模型:

public class PersonCreateViewModel
{
    public SelectList cities {get; set;}
    public String Name { get; set; }
    public String Address { get; set; }

}

这是 Controller 的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);
}

这是 View :
<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有关。我认为,当 View 在表单提交时将模型传递回 Controller 时,它将调用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; }
}

另外,您将需要在 View 模型上具有一个属性来捕获所选值,例如CityId。

然后,您可以使用:
Html.DropDownListFor(m => m.CityId, Model.cities)

关于asp.net-mvc - ViewModel中的ASP.NET MVC SelectList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20387205/

相关文章:

asp.net-mvc - 将 JQuery AJAX 调用转换为 Angular 2 服务

ajax - AJAX 表单提交后重定向

javascript - 使用脚本帮助插入数据库。 (Mvc)

c# - 当前上下文 mvc 4 中不存在名称 ViewBag

asp.net-mvc - ASP.NET MVC : ViewModels versus Domain Entities

asp.net-mvc - 用于处理 UI、验证和异常管理的 angular js

c# - 如果字符串参数以文件扩展名结尾,则请求 session 对象为空

asp.net-mvc - 如何在ASP.NET MVC中创建旋转广告 block ?

c# - 使用 StructureMap 将接口(interface)注入(inject)重载类构造函数

asp.net-mvc - MVC 4 代码优先ForeignKeyAttribute 属性...类型...无效