如何禁用我的 @Html.ListBoxFor()

Posted

技术标签:

【中文标题】如何禁用我的 @Html.ListBoxFor()【英文标题】:How do I disable my @Html.ListBoxFor() 【发布时间】:2016-09-07 02:02:01 【问题描述】:

我需要能够根据 Review 状态禁用此 ListBoxFor()。尽管下面的代码有效,但它显示了所有列表项。

@html.ListBoxFor(m => m.ListOptions, filetypes, Model.IsUnderReview ? new  @class = "disabled"  : new  @class = "multiselectFileTypes" )

禁用它的语法是什么,但只是显示“已选择 2 个项目”?

【问题讨论】:

请注意,禁用 HTML 元素不会阻止任何人使用其名称执行 POST 请求。还要检查这个服务器端。 【参考方案1】:

您不能对htmlAttributes 参数进行内联条件检查。

这应该可行。

@using (Html.BeginForm())

  <label>Select something </label>
  if (!Model.IsUnderReview )
  
    @Html.ListBoxFor(m => m.ListOptions, filetypes, new  @class = "multiselectFileTypes")
  
  else
  
    @Html.ListBoxFor(m => m.ListOptions, filetypes, new  disabled = "disabled" )
  

【讨论】:

感谢您的回复,它确实有效,只是它显示了整个项目列表。语法中一定有一些东西可以解决这个问题。 禁用并不意味着“隐藏所有项目”。这意味着显示项目,但禁用 "look" 这是一个糟糕的解决方案,但我明白为什么它是必要的。 HtmlHelperhtmlAttributes 中对待 name 的方式不同,也许它应该通过接受布尔值并将它们转换为愚蠢的 disabled="disabled" 废话来区别对待 disabledreadonly。 HTML 对布尔值的回避是真正的罪魁祸首。我知道他们为什么这样做,但今天它只是愚蠢的。我想念 XAML。 :.(【参考方案2】:

看来答案是使用Html.helper命令HiddenFor(),像这样

@if (Model.IsUnderReview)

    //You then need to generate a hidden input for each value in SelectedRoles, as it's an array
    @Html.HiddenFor(m => m.SelectedRoles) 

else

    @Html.ListBoxFor(x => x.SelectedRoles, filetypes, new  @class = "multiselectFileTypes" , id = "staticFieldM_" + Model.ID)

通过为每个 SelectedRole 项创建一个隐藏输入,您可以禁用整个列表。

【讨论】:

以上是关于如何禁用我的 @Html.ListBoxFor()的主要内容,如果未能解决你的问题,请参考以下文章

如何从 ListBoxFor 中删除选定的属性

Html.listboxfor() 如何捕获更改/添加项目的事件 - Jquery MVC (C#)

如何在 Mvc3 中填充 ListBoxFor?

无法获得 @Html.ListBoxFor() 的正确语法

MVC 方法从 ListBoxFor 方法输出无序列表

当 Ajax 调用中的下拉列表更改时 ListboxFor 不绑定