Это потому, что атрибут readonly
в HTML разработан таким образом, что его простое присутствие указывает на текстовое поле только для чтения.
Я считаю, что значения true|false
полностью игнорируются атрибутом и влияют на рекомендованное значениеis readonly="readonly"
.
Для повторного включения текстового поля вам необходимо полностью избавиться от атрибута readonly
.
Учитывая, что свойство htmlAttributes
TextBoxFor
IDictionary
, вы можете просто построить объект на основе ваших требований.
IDictionary customHTMLAttributes = new Dictionary<string, object>();
if(x == true)
// Notice here that i'm using == not =.
// This is because I'm testing the value of x, not setting the value of x.
// You could also simplfy this with if(x).
{
customHTMLAttributes.Add("readonly","readonly");
}
@Html.TextBoxFor(model => model.Name, customHTMLAttributes)
Сокращенный способ добавления пользовательского атрибута может быть следующим:
var customHTMLAttributes = (x)? new Dictionary<string,object>{{"readonly","readonly"}}
: null;
или просто:
@Html.TextBoxFor(model => model.Name, (x)? new {"readonly","readonly"} : null);