【问题标题】:Unable to set checkbox checked on MVC page load无法设置在 MVC 页面加载时选中的复选框
【发布时间】:2014-12-21 20:40:00
【问题描述】:

在我的 MVC 视图中,我有一个动态创建的复选框列表。

@foreach (var door in Model.Doors)
{
    <input type="checkbox" id="@door.ID" name="DoorIds" value="door.ID"/>@Html.Label(door.DoorName);
}

我的模型 -

public virtual IList<int> assignedDoors { get; set; }
public int[] DoorIds { get; set; }

当我勾选一些复选框并按保存时,更改将提交到数据库。但是,我似乎不知道如何在页面加载时选中所需的框?

如果我将下面的代码放在 HTML 复选框行中,

checked="@Model.assignedDoors.Contains(@door.ID)" }

复选框被选中,但是当我按下保存时,我收到以下错误 -

值 'door.ID,door.ID' 对 DoorId 无效。

任何想法我哪里出错了?

【问题讨论】:

  • 你需要在door.ID前加上@,所以应该是value="@door.ID"
  • 完美,效果很好
  • checked="@Model.assignedDoors.Contains(@door.ID)" 使复选框被选中,无论door.ID 的值是什么(及其无效的html)。请参阅 Omu 的解决方案。

标签: asp.net-mvc razor checkbox


【解决方案1】:

有两个问题

首先value="door.ID"你忘记了@之前的door.ID

第二,这段代码:

checked="@Model.assignedDoors.Contains(@door.ID)"

将使复选框始终选中,而不是您需要执行以下操作: 此处示例:http://jsbin.com/xonaxaqigi/1/edit

@(Model.assignedDoors.Contains(door.ID) ? "checked='checked'": "")

所以你需要完全没有选中的属性或checked='checked'

【讨论】:

  • 根据 MVC 的版本,您可以只为选中的属性的值设置条件,如果 assignmentDoors 集合不包含门 ID(不需要一个“@”符号,因为您已经在代码上下文中?)。从 MVC 4 开始,在使用 Razor 视图引擎时,将 null 作为属性值返回将不会呈现该属性。
  • 删除了“@”,猜想这会是另一个问题,包含返回 bool 所以 null 应该是不可能的
  • 我的意思是使用 Contains 作为值内的内联条件,并返回空字符串或“已检查”表示 true,null 表示 false。
猜你喜欢
  • 1970-01-01
  • 2021-08-12
  • 2020-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多