我有一个强类型的MVC视图控件,它负责用户可以创建和编辑客户端项目的UI。我希望他们能够在创建时定义ClientId,但不能编辑,并将其反映在UI中。
为此,我有以下一行:
<%= Html.TextBox("Client.ClientId",ViewData.Model.ClientId,new { @readonly = (ViewData.Model.ClientId != null && ViewData.Model.ClientId.Length > 0 ? "readonly" : "false") } ) %>
看起来,无论我给予readonly属性(甚至是“false”和“”),Firefox和IE7都会使输入成为只读,这是令人厌恶的反直觉的。有没有一个很好的,三元运算符的方法来完全放弃属性,如果不需要的话?
解决方法
艰难的问题…但是,如果您只想定义readonly属性,可以这样做:
<%= Html.TextBox("Client.ClientId",ViewData.Model.ClientId != null && ViewData.Model.ClientId.Length > 0 ? new { @readonly = "readonly" } : null) %>
如果要定义更多属性,则必须定义两个匿名类型,并具有多个属性副本。例如,这样的东西(我不喜欢)
ClientId.Length > 0 ? (object)new { @readonly = "readonly",@class = "myCSS" } : (object)new { @class = "myCSS" }