Как установить свойство текстового поля только для чтения true или false - PullRequest
5 голосов
/ 07 июля 2011

Мне нужна ваша помощь в создании свойства readonly для текстового поля true или false в зависимости от условия.Я пытался, однако, безуспешно.Ниже приведен пример кода:

string property= "";
if(x=true)
{
     property="true"
}
@Html.TextBoxFor(model => model.Name, new { @readonly = property})

Мой вопрос: несмотря на ложное условие, я не могу написать или изменить текстовое поле?

Ответы [ 3 ]

9 голосов
/ 07 июля 2011

Это потому, что атрибут readonly в HTML разработан таким образом, что его простое присутствие указывает на текстовое поле только для чтения.

Я считаю, что значения true|false полностью игнорируются атрибутом и влияют на рекомендованное значениеis readonly="readonly".

Для повторного включения текстового поля вам необходимо полностью избавиться от атрибута readonly.

Учитывая, что свойство htmlAttributes TextBoxForIDictionary, вы можете просто построить объект на основе ваших требований.

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);
3 голосов
/ 28 апреля 2015

Я добился этого с помощью некоторых методов расширения

public static MvcHtmlString IsDisabled(this MvcHtmlString htmlString, bool disabled)
    {
        string rawstring = htmlString.ToString();
        if (disabled)
        {
            rawstring = rawstring.Insert(rawstring.Length - 2, "disabled=\"disabled\"");
        }
        return new MvcHtmlString(rawstring);
    }

public static MvcHtmlString IsReadonly(this MvcHtmlString htmlString, bool @readonly)
    {
        string rawstring = htmlString.ToString();
        if (@readonly)
        {
            rawstring = rawstring.Insert(rawstring.Length - 2, "readonly=\"readonly\"");
        }
        return new MvcHtmlString(rawstring);
    }

а потом ....

@Html.TextBoxFor(model => model.Name, new { @class= "someclass"}).IsReadonly(x)
1 голос
/ 07 июля 2011

Вам, вероятно, нужно реорганизовать свой код, чтобы он был чем-то вроде

if(x)
{
    @Html.TextBoxFor(model => model.Name, new { @readonly = "readonly"})
}
else
{
    @Html.TextBoxFor(model => model.Name)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...