如何设置文本框只读属性为真或假

本文关键字:只读属性 置文本 | 更新日期: 2023-09-27 18:01:31

我需要你的帮助在创建一个文本框只读属性true或false基于一个条件。我试过了,但没有成功。下面是我的示例代码:

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

我的问题是:即使条件是假的,我无法编写或编辑文本框?

如何设置文本框只读属性为真或假

这是因为HTML中的readonly属性的设计使得它的存在表明是只读文本框。

我认为值true|false被属性完全忽略了,实际上推荐值是readonly="readonly"

要重新启用文本框,您需要完全摆脱readonly属性。

考虑到TextBoxForhtmlAttributes属性是一个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);

我使用一些扩展方法实现了它

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)

您可能需要重构您的代码,使其像

那样
if(x)
{
    @Html.TextBoxFor(model => model.Name, new { @readonly = "readonly"})
}
else
{
    @Html.TextBoxFor(model => model.Name)
}