我需要你的帮助,根据条件创建一个文本框readonly属性true或false。 然而我尝试了却没有成功。 以下是我的示例代码:
string property= "";
if(x=true)
{
property="true"
}
@Html.TextBoxFor(model => model.Name, new { @readonly = property})
我的问题是:即使条件错误,我也无法编写或编辑文本框?
答案 0 :(得分:9)
这是因为HTML中的readonly
属性被设计为仅仅存在表示只读文本框。
我认为属性完全忽略了值true|false
,而推荐的值是readonly="readonly"
。
要重新启用文本框,您需要完全删除readonly
属性。
鉴于htmlAttributes
的{{1}}属性为TextBoxFor
,您只需根据自己的要求构建对象。
IDictionary
添加自定义attrbute的简便方法可能是:
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;
答案 1 :(得分:3)
我使用一些扩展方法实现了它
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)
答案 2 :(得分:1)
您可能需要重构代码,使其符合
的要求if(x)
{
@Html.TextBoxFor(model => model.Name, new { @readonly = "readonly"})
}
else
{
@Html.TextBoxFor(model => model.Name)
}