我需要你的幫助,根據條件創建文本框只讀屬性true或false。 我嘗試過但不成功。 下面是我的示例代碼:如何設置文本框的只讀屬性true或false
string property= "";
if(x=true)
{
property="true"
}
@Html.TextBoxFor(model => model.Name, new { @readonly = property})
我的問題是:即使條件爲假,我無法寫入或編輯文本框?
我需要你的幫助,根據條件創建文本框只讀屬性true或false。 我嘗試過但不成功。 下面是我的示例代碼:如何設置文本框的只讀屬性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)
一條捷徑添加自定義attrbute可能是:
var customHTMLAttributes = (x)? new Dictionary<string,object>{{"readonly","readonly"}}
: null;
或者乾脆:
@Html.TextBoxFor(model => model.Name, (x)? new {"readonly","readonly"} : null);
你可能需要重構你的代碼是沿
東西線if(x)
{
@Html.TextBoxFor(model => model.Name, new { @readonly = "readonly"})
}
else
{
@Html.TextBoxFor(model => model.Name)
}
請注意,x = true始終爲真,因此您將始終以只讀文本框結束。 –
對不起,來自我的原件複製/粘貼。 – Treborbob
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)
最後一行不起作用。看來你的速記測試是錯誤的,甚至不可能。我從Visual Studio編輯器中獲得「無效的匿名類型成員聲明符」。 – Johncl