【问题标题】:How do I disable my @Html.ListBoxFor()如何禁用我的 @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 请求。还要检查这个服务器端。

标签: asp.net-mvc razor html.listboxfor


【解决方案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 项创建一个隐藏输入,您可以禁用整个列表。

【讨论】:

    猜你喜欢
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2011-07-03
    相关资源
    最近更新 更多