Asp.net mvc ASP.NET MVC中的SelectList为模型属性指定值

Asp.net mvc ASP.NET MVC中的SelectList为模型属性指定值,asp.net-mvc,Asp.net Mvc,我的问题与ASP.NETMVC4有关 我在操作方法中有以下代码: 我的看法是: 我的目标是提供一个包含allProfiles.ProfileName的下拉列表 每个选定项的文本。 当他们选择其中一个时,Id属性被分配给Model.Author。 提交表单时,我希望POST方法显示一条消息 作者包含那个整数 我的DropDownList正确显示配置文件名列表。但是表单提交 始终将Model.Author设置为0 我做错了什么?我解决了自己的问题 为了使您的viewbag中的selectlist成为

我的问题与ASP.NETMVC4有关

我在操作方法中有以下代码:

我的看法是:

我的目标是提供一个包含allProfiles.ProfileName的下拉列表 每个选定项的文本。 当他们选择其中一个时,Id属性被分配给Model.Author。 提交表单时,我希望POST方法显示一条消息 作者包含那个整数

我的DropDownList正确显示配置文件名列表。但是表单提交 始终将Model.Author设置为0


我做错了什么?

我解决了自己的问题

为了使您的viewbag中的selectlist成为一个下拉列表,该列表是谁的值 在视图中设置模型的属性,解决方案如下:

GET-Create操作方法

创建下拉列表的视图


这就是它。

这是一种将模型值传递给视图的非常糟糕的方法。这就是创建专用viewmodel的要点。因为看起来您有许多要在表单上提交的值。然后将模型传递给表单,并使用html助手方法editorfor,。。。生成页面上的元素。在控制器后操作中,将整个viewmodel传递回控制器。默认的模型绑定器应该为您连接所有的值。为了简单起见,您可以从第一行的SelectList中删除.ToList。。。接受IEnumerable,因此无需创建列表的额外开销,帮助器可以缩短为@Html.DropDownListForm=>m.Author,ViewBag.allProfiles
public ActionResult Create()
{
     var allProfiles = db.Profiles.ToList();
     var profsSelectList = new SelectList(allProfiles, "Id", "ProfileName");
     ViewBag.allProfiles = profsSelectList;
     return View();
}
<div class="editor-field">
    @Html.DropDownList("allProfiles")
    @Html.ValidationMessageFor(model => model.Author)
</div>
public ActionResult Create()
{
    var allProfiles = db.Profiles.ToList();
    var profsSelectList = new SelectList(allProfiles, "Id", "ProfileName");
    ViewBag.allProfiles = profsSelectList;
    return View();
}
<div class="editor-field">
     @Html.DropDownListFor(m=>m.Author, (IEnumerable<SelectListItem>)ViewBag.allProfiles)
</div>