2016-11-22 68 views
-1

我有一个布尔值IsAcre。如果为true,那么文本框需要能够接受一个值。如果为false,则该文本框应该是只读的。我尝试几种不同的方法:如何在MVC 5剃须刀视图上设置动态只读?

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

第一个似乎是syntacticlly不正确,第二个呈现为:

readonly="False" 

即使它呈现假只读,文本框仍然设置为只读,我假设因为布尔值作为字符串传递。

有没有办法做到这一点在线或将要的if/else对整个文本框?

+0

我看到的价值属性。所以readonly = false实际上等于缺少readonly关键字,是的? – BattlFrog

+0

谢谢。当你得到一分钟,设置为答案。 – BattlFrog

回答

1

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