tag*_*s2k 30 asp.net-mvc attributes html-helper readonly
我有一个强类型的MVC视图控件,它负责用户可以创建和编辑客户端项目的UI.我希望他们能够定义ClientId创建,但不能编辑,这将在UI中反映出来.
为此,我有以下几行:
<%= Html.TextBox("Client.ClientId", ViewData.Model.ClientId, new
{ @readonly =
(ViewData.Model.ClientId != null && ViewData.Model.ClientId.Length > 0
? "readonly" : "false")
} )
%>
Run Code Online (Sandbox Code Playgroud)
似乎无论我给readonly属性(甚至"false"和"")赋予什么值,Firefox和IE7都使输入成为只读,这是令人讨厌的反直觉.如果不需要,是否有一个很好的,基于三元运算符的方法来完全删除属性?
Pan*_*nos 38
难题......但是,如果只想定义readonly属性,可以这样做:
<%= Html.TextBox("Client.ClientId", ViewData.Model.ClientId,
ViewData.Model.ClientId != null && ViewData.Model.ClientId.Length > 0
? new { @readonly = "readonly" }
: null)
%>
Run Code Online (Sandbox Code Playgroud)
如果要定义更多属性,则必须定义两个匿名类型并具有多个属性副本.例如,像这样的东西(我不喜欢这样):
ClientId.Length > 0
? (object)new { @readonly = "readonly", @class = "myCSS" }
: (object)new { @class = "myCSS" }
Run Code Online (Sandbox Code Playgroud)
Avi*_*iko 29
如果要定义多个属性,并且条件只读而不重复其他属性,则可以对属性使用Dictionary而不是匿名类型.
例如
Dictionary<string, object> htmlAttributes = new Dictionary<string, object>();
htmlAttributes.Add("class", "myCSS");
htmlAttributes.Add("data-attr1", "val1");
htmlAttributes.Add("data-attr2", "val2");
if (Model.LoggedInData.IsAdmin == false)
{
htmlAttributes.Add("readonly", "readonly");
}
@:User: @Html.TextBoxFor(
m => m.User,
htmlAttributes)
Run Code Online (Sandbox Code Playgroud)
提示:仅仅只读/禁用属性的存在就会使元素在浏览器中只读或禁用。
@Html.TextBoxFor(x => x.Name, isReadonly ?(object) new { @readonly = true } : new { /*Some other attributes*/ })
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
49704 次 |
| 最近记录: |