如何设置文本框readonly属性true或false

时间:2011-07-07 12:47:28

标签: c# asp.net-mvc-3

我需要你的帮助,根据条件创建一个文本框readonly属性true或false。 然而我尝试了却没有成功。 以下是我的示例代码:

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

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

3 个答案:

答案 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)
}