【问题标题】:Disabling EditorFor禁用 EditorFor
【发布时间】:2017-02-27 17:40:50
【问题描述】:

我有一个这样的 EditorFor HTML 助手:

<td>@Html.EditorFor(m => m.Name, belowLevel ? disabledHtmlOptions : null)</td>

-

object disabledHtmlOptions = new { disabled = "disabled" };

我想每次都禁用它。我怎么做?我不想做数据注释,因为这个属性也在其他视图中使用。只有在这个视图上我想禁用它。

【问题讨论】:

  • raj,由于您对问题的描述有点模糊,因此您可能无法在这里得到很好的答案。有什么方法可以扩展问题和所需的解决方案,如果可能的话,可能会扩展你的示例加上背景潜台词
  • @Jim,我不知道如何更准确地描述它,但是,我只需要禁用我的文本框或编辑器来显示名称的框。我可以在标签中显示,但这不是要求。
  • raj - 我认为您的编辑很有帮助 :)
  • 顺便说一句,请注意这一点,因为即使输入被禁用,您的用户仍然可以向您发送新值。

标签: c# asp.net-mvc asp.net-mvc-3


【解决方案1】:

MVC 5.1 现在允许在 EditorFor (see this answer) 中传递 HTML 属性。所以你可以这样做:

@Html.EditorFor(model => m.Name, new { htmlAttributes = new { disabled = "disabled" } })

【讨论】:

    【解决方案2】:

    如果您坚持使用EditorFor,您可以在页面加载时通过 jQuery 设置 disabled 属性。我知道这并不理想,但这是唯一的方法,除非您为 EditorFor 创建一个接受 htmlAttributes 集合的重载

    $(document).ready(function() {
       $('#Name').attr('disabled', 'disabled');
    });
    

    【讨论】:

      【解决方案3】:

      您可以只为视图呈现 HTML。如果它是“只读”的,只需渲染文本。否则你可以渲染一个&lt;input&gt; 元素。

      例如,代替

      <td>@Html.EditorFor( m => m.Name )</td>
      

      <td>@Model.Name</td>
      

      <td><input type="text">@Model.Name</input></td>
      

      【讨论】:

      • m 在我尝试此@m.Name 时在当前上下文中不存在?
      • 试试@Model.Name,(击败我@Jisaak)。更新了答案。
      • 我更新了我的问题。我有一个要禁用它的对象。还是不行。
      • @Raj,如果您需要禁用它,我的第一个选项不会起作用吗?将其呈现为文本 (@Model.Name) 将使其不可编辑。如果您需要禁用的输入框,只需将 disabled="disabled" 放在输入元素本身中即可。如果您需要有条件地添加 disabled 属性,您也可以这样做。
      • @contactmatt:所以你说的是这样的:@Html.EditorFor(m => m.Name, disabled = "disabled")
      【解决方案4】:

      我不相信EditorFor 方法的签名允许您指定任何HTML 属性。但是,如果您将其更改为 TextBoxFor,则可以。

      <td>@Html.TextBoxFor(m => m.Name, belowLevel ? disabledHtmlOptions : null)</td>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-12
        • 2011-03-19
        • 2011-02-17
        • 1970-01-01
        相关资源
        最近更新 更多