关于DropDownListFor
的这些问题中的另一个问题没有选择“ Selected”值。
这是代码:
模型:
public class CreateEditAccountModel
{
[Required]
[Display(Name = "Permission")]
public int PermissionId { get; set; }
public IEnumerable<SelectListItem> Permissions { get; set; }
}
控制器:
[HttpGet]
[Authorize]
public ActionResult EditAccount(int id)
{
CreateEditAccountModel model = new CreateEditAccountModel();
model.Permissions = PermissionsAll();
return View("CreateEditAccount", model);
}
在这一点上,如果我在返回行上放置一个断点,则
model.Permissions
包含正确的IEnumerable<SelectListItem>
对象,该对象包含多个项目,只有一个具有Selected = true
。视图:
@using (Html.BeginForm())
{
@Html.DropDownListFor(m => m.PermissionId, Model.Permissions)
}
渲染:
<select id="PermissionId" name="PermissionId">
<option value="">-- Select --</option>
<option value="1">Permission one</option>
<option value="2">Permission two</option>
</select>
由于某些原因,任何选项上都没有选定的属性,因此选择了第一个选项。
任何帮助表示赞赏。
更新
看来这与article有关。总结本文的解决方案,我需要确保属性名称(
@html.DropDownList
的第一个参数)与模型的任何现有属性都不匹配。有人可以解释为什么会这样吗?当我在视图中编写如下内容时,它会正确地下拉列表:
@Html.DropDownList("PermissionIdNotMatching", Model.Permissions)
但是,这样做没有任何逻辑意义,因为我实际上希望活页夹能够将select元素的名称与model属性匹配。否则,我将不得不像这样手动获取值:
Request.Form["PermissionIdNotMatching"];
有人有什么想法吗?
解
查看已接受的答案和对此的第一条评论。
最佳答案
好的,让我们讨论一下PermissionId
为int时的示例。您发布了类型为CreateEditAccountModel
的模型以进行查看。创建此模型时,PermissionId
等于0(int的默认值)。并且DropDownListFor
在视图中获得此值。因此,您没有选定的值。
当您使用字符串类型时,PermissionId
的默认值为null,因此`DropDownListFor将采用SelectList的默认值。
在这种情况下,最好对int?
使用Nullable<int>
或PermissionId
类型。
关于asp.net-mvc-3 - DropDownListFor-不选择“选定”值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9832905/