剃刀下拉列表不禁用



我有一个填充/工作正常的SelectList

我有一项新要求,即为某些用户禁用该列表。所以我在ViewModel中添加了一个新属性,LockSelectList。此属性在控制器中设置(并且有效)。

但是,当呈现列表时,它始终处于禁用状态。

我试过了

@Html.DropDownListFor(x => x.Id,  Model.AllLocations, new {disabled = Model.LockLocationList? "true" : "false" })
@Html.DropDownListFor(x => x.Id,  Model.AllLocations, new {disabled = Model.LockLocationList? "disabled" : "false" })
@Html.DropDownListFor(x => x.Id,  Model.AllLocations, new {disabled = Model.LockLocationList? "disabled" : "" })

但它们都呈现正确的 HTML,但似乎禁用属性的存在,无论值如何都会禁用列表。那么我该对代码进行哪些调整才能使其工作呢?(最好不使用jQuery来处理事件后的启用/禁用)

我建议按照以下方式进行操作...

@if(Model.LockLocationList)
{
      @Html.DropDownListFor(x => x.Id,  Model.AllLocations, new {disabled = "disabled" })
}else
{
      @Html.DropDownListFor(x => x.Id,  Model.AllLocations)
}

或者,您可以参考以下帖子,根据您的选择有条件地添加它。

条件禁用输入

或者

,如果条件为真,您可以按如下方式执行此操作,使包含禁用属性的对象成为空白对象。我希望它能帮助你

@Html.DropDownList(x => x.Id,  Model.AllLocations, Model.LockLocationList == true ? new { @disabled = "disabled" } as object : new {} as object)

只要下拉列表中存在 disabled 属性,无论值如何,都会禁用该属性。因此,当它不应该被禁用时,您根本不需要设置它。

有关代码示例,请参阅 K D 的答案

最新更新