如何禁用我的 @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" 这是一个糟糕的解决方案,但我明白为什么它是必要的。HtmlHelper
在 htmlAttributes
中对待 name
的方式不同,也许它应该通过接受布尔值并将它们转换为愚蠢的 disabled="disabled"
废话来区别对待 disabled
和 readonly
。 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()的主要内容,如果未能解决你的问题,请参考以下文章