2011-07-07 98 views
4

我需要你的幫助,根據條件創建文本框只讀屬性true或false。 我嘗試過但不成功。 下面是我的示例代碼:如何設置文本框的只讀屬性true或false

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

我的問題是:即使條件爲假,我無法寫入或編輯文本框?

回答

8

這是因爲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) 

一條捷徑添加自定義attrbute可能是:

var customHTMLAttributes = (x)? new Dictionary<string,object>{{"readonly","readonly"}} 
                  : null; 

或者乾脆:

@Html.TextBoxFor(model => model.Name, (x)? new {"readonly","readonly"} : null); 
+0

最後一行不起作用。看來你的速記測試是錯誤的,甚至不可能。我從Visual Studio編輯器中獲得「無效的匿名類型成員聲明符」。 – Johncl

1

你可能需要重構你的代碼是沿

東西線
if(x) 
{ 
    @Html.TextBoxFor(model => model.Name, new { @readonly = "readonly"}) 
} 
else 
{ 
    @Html.TextBoxFor(model => model.Name) 
} 
+0

請注意,x = true始終爲真,因此您將始終以只讀文本框結束。 –

+0

對不起,來自我的原件複製/粘貼。 – Treborbob

3

I a chieved它使用一些擴展方法

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) 
相關問題