【发布时间】:2014-04-18 17:25:38
【问题描述】:
我有一个文本框元素,它使用 MVC 的标记在我的 .ascx 文件中呈现:
<%= Html.TextBoxFor(model => model.AssignedOperatorDisplayName, new
{
@class = "assignedOperatorDisplayNameTextArea"
})
%>
我现在需要有条件地禁用此文本框元素。最初,我尝试通过将 disabled 属性设置为 true 或 false 来做到这一点:
<%= Html.TextBoxFor(model => model.AssignedOperatorDisplayName, new
{
@class = "assignedOperatorDisplayNameTextArea",
disabled = Model.IsElementDisabled()
})
%>
不幸的是,这不起作用,因为浏览器将 disabled 属性的存在解释为“true”,无论其值设置为 true 还是 false,如下所示:http://jsfiddle.net/zWQbL/
所以,我想知道如何做到这一点。我正在使用以下文章将两个匿名对象合并在一起:Merging anonymous types 但这不起作用,感觉真的很不对。
有什么想法吗?
编辑:我选择了this answer,但有几种方法可以实现结果。我鼓励任何关注此问题的人在使用一种解决方案而不是另一种解决方案之前考虑存在需求。
<%= Html.TextBoxFor(model => model.AssignedOperatorDisplayName, new Dictionary<string, object>()
{
{
"class", "assignedOperatorDisplayNameTextArea"
}
}.WithAttrIf(Model.IsTaskComplete(), "disabled", "true"))%>
public static Dictionary<string, object> WithAttrIf(this Dictionary<string, object> dictionary, bool condition, string attrname, object value)
{
if (condition)
dictionary[attrname] = value;
return dictionary;
}
【问题讨论】:
-
不确定,但试试
visible
标签: html asp.net-mvc asp.net-mvc-3