Asp.net mvc 如何在MVC5 razor视图上设置动态只读?

Asp.net mvc 如何在MVC5 razor视图上设置动态只读?,asp.net-mvc,razor,Asp.net Mvc,Razor,我有一个布尔值IsAcre。如果为true,则textbox需要能够接受一个值。如果为false,则文本框应为只读。我正在尝试几种不同的方法: @Html.EditorFor(model => model.Activity.Acres, new { htmlAttributes = new { @class = "form-control", Model.Activity.IsAcres ? null : @readonly = "readonly" }} ) 及 第一个在语法上

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

   @Html.EditorFor(model => model.Activity.Acres, new { htmlAttributes = new { @class = "form-control", Model.Activity.IsAcres ? null : @readonly = "readonly" }} ) 

第一个在语法上似乎不正确,第二个呈现为:

readonly="False"
即使它呈现假readonly,textbox仍然设置为readonly,我假设这是因为bool值是作为字符串传递的


是否有方法内联执行此操作,或者必须在整个文本框上执行if/else操作?

属性为a,这意味着它的存在表示真实值,因此呈现
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
扩展方法,该方法基于另一个属性的值有条件地添加属性(比如)


readonly
属性是一个属性,这意味着它的存在表示真实值,因此呈现
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
扩展方法,该方法基于另一个属性的值有条件地添加属性(比如)


我懂了。所以readonly=false实际上等于没有readonly关键字,是吗?谢谢。当你得到一分钟,设置为答案。我明白了。所以readonly=false实际上等于没有readonly关键字,是吗?谢谢。当你得到一分钟,设置为答案。
@Html.ReadOnlyTextBoxIf(m => m.Activity.Acres, Model.Activity.IsAcres, new { @class = "form-control" })