如何设置文本框只读属性为真或假
本文关键字:只读属性 置文本 | 更新日期: 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
属性。
考虑到TextBoxFor
的htmlAttributes
属性是一个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)
}