gpt4 book ai didi

asp.net-mvc-3 - DropDownListFor - 不选择 "Selected"值

转载 作者:行者123 更新时间:2023-12-03 22:31:55 26 4
gpt4 key购买 nike

关于 DropDownListFor 的另一个问题不选择“选定”值。
这是代码:

型号:

public class CreateEditAccountModel
{
[Required]
[Display(Name = "Permission")]
public int PermissionId { get; set; }
public IEnumerable<SelectListItem> Permissions { get; set; }
}

Controller :

[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>

由于某种原因,任何选项都没有 selected 属性,因此选择了第一个选项。

任何帮助表示赞赏。

更新

似乎与此有关 article .总结本文的解决方案,我需要确保属性名称( @html.DropDownList 的第一个参数) 匹配模型的任何现有属性。谁能解释为什么会这样?

当我在 View 中写入如下内容时,它会正确呈现下拉:

@Html.DropDownList("PermissionIdNotMatching", Model.Permissions)

但是,这样做没有任何逻辑意义,因为我实际上希望活页夹能够将选择元素的名称与模型属性相匹配。否则我必须手动获取这样的值: Request.Form["PermissionIdNotMatching"];
有人有什么想法吗?

解决方案

请参阅已接受的答案和对其的第一条评论。

最佳答案

好的,让我们讨论你的例子,当 PermissionId是int。您发布了 CreateEditAccountModel 类型的模型查看。创建此模型时,PermissionId等于 0(int 的默认值)。和 DropDownListFor鉴于得到这个值。因此,您没有选定的值。
使用字符串类型时,默认值为 PermissionId为空,因此`DropDownListFor 采用SelectList 的默认值。

在这种情况下,最好使用 int?Nullable<int>输入 PermissionId .

关于asp.net-mvc-3 - DropDownListFor - 不选择 "Selected"值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9832905/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com