【问题标题】:Optionally disable element rendered via MVC可选择禁用通过 MVC 呈现的元素
【发布时间】: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


【解决方案1】:

使用三元运算符有条件地分配 HTML 属性。

<$= Html.TextBoxFor(model => model.AssignedOperatorDisplayName, 
    Model.IsElementDisabled() ? 
        (object)new 
        {
            disabled="disabled", 
            @class = "assignedOperatorDisplayNameTextArea" 
        } :
        new { @class = "assignedOperatorDisplayNameTextArea" })

【讨论】:

  • 有没有办法在保持我的班级声明干燥的同时实现这一目标?
  • 您可以创建自己的辅助方法,允许您传入是否要禁用控件。这里有一个在 Stackoverflow 上执行此操作的示例 stackoverflow.com/a/6660176/97382
  • 酷。感谢您的信息。我必须将此逻辑应用于几种类型的元素,而不仅仅是 TextBoxFor。您对将扩展方法应用于多种类型的元素是否更好或使用我在原始帖子中编辑的字典扩展是否更好有任何想法?
  • 我认为决定走哪条路真的是个人喜好之一。我喜欢尽量保持我的观点相当干净,对我来说,使用该字典扩展的语法有点恶心,而且你想要设置的 HTML 属性越多,它就会变得越糟糕。但这是个人/审美观点,而不是技术观点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-09
  • 1970-01-01
  • 1970-01-01
  • 2017-03-25
  • 2020-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多