【问题标题】:How do I set dynamic readonly on MVC 5 razor view?如何在 MVC 5 razor 视图上设置动态只读?
【发布时间】:2016-11-22 23:47:46
【问题描述】:

我有一个布尔值 IsAcre。如果为真,那么文本框需要能够接受一个值。如果为 false,则文本框应该是只读的。我正在尝试几种不同的方法:

   @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 只读,文本框仍设置为只读,我假设是因为 bool 值作为字符串传递。

有没有办法做到这一点内联或必须在整个文本框上 if/else?

【问题讨论】:

  • 我明白了。所以 readonly=false 实际上等于没有 readonly 关键字,是吗?
  • 谢谢。当你得到一分钟时,设置为答案。

标签: asp.net-mvc razor


【解决方案1】:

readonly 属性是一个boolean attribute,这意味着它的存在代表真实值,因此呈现readonly="False" 的第二个代码sn-p 使输入只读(尽管它的html 无效)。还要注意规范

布尔属性不允许使用值“true”和“false”。要表示假值,必须完全省略该属性。

您需要在您的第一个代码 sn-p 中使用该代码来确保添加或省略该属性,尽管您可以使用替代方法,例如

@{ 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" })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    相关资源
    最近更新 更多