[英]Checkbox disabled attribute in ASP.NET MVC
我的 ViewModel 具有 selected 和 selectable 属性。 两者都是布尔值。 我希望我的视图有一个复选框,当 selectable 为 true 时启用,当 selectable 为 false 时禁用。 完成此操作的正确剃刀语法是什么?
我在表格中的项目列表上尝试了下面的代码。 无论可选值如何,每一行都会返回一个禁用的复选框。
@Html.CheckBoxFor(modelItem => item.Selected, new { @disabled = !item.Selectable })
这是不容易有实现这个if
辅助方法内部条件,因为所有下面的标记将呈现一个残疾人chechbox。
<input type="checkbox" disabled>
<input type="checkbox" disabled="disabled">
<input type="checkbox" disabled="false">
<input type="checkbox" disabled="no">
<input type="checkbox" disabled="enabled">
这应该适用于剃须刀。 简单的条件和渲染你想要的。
@if(item.Selected)
{
@Html.CheckBoxFor(modelItem => item.Selected)
}
else
{
@Html.CheckBoxFor(modelItem => item.Selected, new { @disabled = "disabled"})
}
您可以考虑编写一个自定义 html 帮助程序,它为此呈现正确的标记。
这将不起作用,因为<input disabled="anything" />
将导致禁用控件。 当它应该被禁用时,您只需要拥有一个 @disabled 属性。
尝试这样的事情:
@Html.CheckBoxFor(modelItem => item.Selected, item.Selectable ? (object)new {} : (object)new { @disabled = "disabled" })
请注意,您可能需要强制转换为(object)
问题是当您必须添加 1 个以上的 HTML 属性时。 这是一团糟:
@if(item.Selected)
{
@Html.CheckBoxFor(modelItem => item.Selected, new { @data_foo = "bar"})
}
else
{
@Html.CheckBoxFor(modelItem => item.Selected, new { @data_foo = "bar", @disabled = "disabled"})
}
我为解决这个问题所做的是使用以前加载的IDictionary<string, object>
:
var htmlAttributes = new Dictionary<string, object>{
{"data-foo", "bar"}
};
if(!item.Selected)
{
htmlAttributes.Add("disabled", "disabled");
}
然后我只创建一次复选框组件:
@Html.CheckBoxFor(modelItem => item.Selected, htmlAttributes)
对不起,我之前的回答是错误的。
一旦禁用属性,输入元素将被禁用。 值是真还是假都没有关系。 在 HTML 中,您不能将 disabled 设置为 false。
因此,您必须仅在条件有效时设置 disabled 属性。
就像是:
object attributes = null;
if (!item.Selectable)
{
attributes = new { disabled = "disabled"};
}
@Html.CheckBoxFor(modelItem => item.Selected, attributes)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.