Dmi*_*try 14 html.dropdownlistfor asp.net-mvc-3
关于DropDownListFor不选择"已选择"值的另一个问题.这是代码:
模型:
public class CreateEditAccountModel
{
[Required]
[Display(Name = "Permission")]
public int PermissionId { get; set; }
public IEnumerable<SelectListItem> Permissions { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
控制器:
[HttpGet]
[Authorize]
public ActionResult EditAccount(int id)
{
CreateEditAccountModel model = new CreateEditAccountModel();
model.Permissions = PermissionsAll();
return View("CreateEditAccount", model);
}
Run Code Online (Sandbox Code Playgroud)
此时,如果我在返回线上放置一个断点,则model.Permissions包含IEnumerable<SelectListItem>具有多个项目且只有一个的正确对象Selected = true.
视图:
@using (Html.BeginForm())
{
@Html.DropDownListFor(m => m.PermissionId, Model.Permissions)
}
Run Code Online (Sandbox Code Playgroud)
呈现:
<select id="PermissionId" name="PermissionId">
<option value="">-- Select --</option>
<option value="1">Permission one</option>
<option value="2">Permission two</option>
</select>
Run Code Online (Sandbox Code Playgroud)
由于某种原因,任何选项都没有选定属性,并且选择了第一个选项.
任何帮助表示赞赏.
UPDATE
它似乎与本文有关.总结本文的解决方案,我需要确保属性名称(第一个参数@html.DropDownList)与模型的任何现有属性都不匹配.任何人都可以解释为什么会这样吗?
当我在视图中写入如下内容时,它会正确呈现下拉:
@Html.DropDownList("PermissionIdNotMatching", Model.Permissions)
Run Code Online (Sandbox Code Playgroud)
但是,这样做没有任何逻辑意义,因为我实际上希望binder能够将select元素的名称与model属性相匹配.否则我必须手动抓取这样的值:Request.Form["PermissionIdNotMatching"];
有人有什么想法吗?
解
查看已接受的答案及其第一条评论.
好吧,让我们讨论你的例子,什么时候PermissionId是int.您发布了CreateEditAccountModel要查看的类型模型.创建此模型时,PermissionId等于0(默认值为int).并DropDownListFor在视图中获得此值.因此,您没有选定的值.当你使用字符串类型时,默认值为PermissionIdnull,因此`DropDownListFor取默认值为SelectList.
在这种情况下,最好使用int?或Nullable<int>输入PermissionId.
| 归档时间: |
|
| 查看次数: |
21239 次 |
| 最近记录: |