我有一个bool值IsAcre。如果为true,则textbox需要能够接受值。如果为false,则文本框应为readonly。我正在尝试几种不同的方式:
@Html.EditorFor(model => model.Activity.Acres, new { htmlAttributes = new { @class = "form-control", Model.Activity.IsAcres ? null : @readonly = "readonly" }} )
和
@Html.TextBoxFor(model => model.Activity.Volume, new { @class = "form-control", @readonly = "@Model.Activity.IsVolume" })
第一个似乎在语法上不正确,第二个呈现为:
readonly="False"
即使它只读取false,文本框仍然设置为readonly,我假设因为bool值是作为字符串传递的。
有没有办法在内联中执行此操作或在整个文本框中使用if / else?
答案 0 :(得分:3)
readonly
属性是boolean attribute,这意味着它的存在代表真值,因此呈现readonly="False"
的第二个代码段会使输入成为只读(尽管其无效的html)。另请注意规格
布尔属性不允许使用值“true”和“false”。要表示错误值,必须完全省略该属性。
您需要使用第一个代码段中的代码来确保添加或省略属性,尽管您可以使用
等替代方案@{ var attributes = Model.Activity.IsAcres ? (object)new { @class = "form-control"} : (object)new { @class = "form-control", readonly = "readonly" }; }
@Html.TextBoxFor(model => model.Activity.Volume, attributes)
如果这是您经常使用的内容,那么您可以创建一个HtmlHelper
扩展方法,根据另一个属性的值有条件地添加属性(比如说)
@Html.ReadOnlyTextBoxIf(m => m.Activity.Acres, Model.Activity.IsAcres, new { @class = "form-control" })