【问题标题】:How to disable a control inside a User Control如何禁用用户控件中的控件
【发布时间】:2015-02-26 20:27:20
【问题描述】:

我认为这将是一件简单的事情,但我遇到了一些问题。我对服务器控件的初始 asp.net 标记如下所示:

<ucTextArea:UserControlTextArea ID="taRemarks" runat="server" />

但是,在后面的代码中,我有一个条件语句来检查用户权限以启用或不启用此文本字段,如下所示:

if (CurrentUser.AccountTypeID == 4 || CurrentUser.AccountTypeID == 6)
    taRemarks.Attributes.Add("enabled", "");
else
    taRemarks.Attributes["disabled"] = "true";

以上是我尝试实现此目的的两种方法,但在浏览器中呈现时均未奏效。如何禁用此服务器控件?

编辑:UserControlTextArea.ascx 定义如下:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="UserControlTextArea.ascx.cs"  Inherits="stuff....UserControlTextArea" %>

<script type="text/jscript" language="javascript">
    $(document).ready(function () {
        var counterLabel = $('#<%=lblCounter.ClientID %>');
        var textArea = $('#<%=tbTextArea.ClientID %>');
        var maxNumber = parseInt('<%=txtMaxCharacters.Value%>');
        FieldCounter(textArea, counterLabel, maxNumber);

        $(textArea).keyup(function () {
            CheckFieldLength($(textArea), maxNumber);
            FieldCounter(textArea, $(counterLabel), maxNumber);
        });
    });
</script>
<div id="OuterContainer" runat="server">
    <asp:TextBox ID="tbTextArea" runat="server" TextMode="MultiLine" Width="100%"></asp:TextBox>
    <span class="fieldLengthCounter">
        characters left: 
        <asp:Label ID="lblCounter" runat="server"></asp:Label>
    </span>
    <input type="hidden" runat="server" id="txtMaxCharacters" />
</div>

【问题讨论】:

  • 你不能用taRemarks.Enabled = false;吗?
  • 你觉得对吗?但没有这样的属性。
  • 您的usercontrol 中有哪些控件?您要禁用哪个控件?
  • 该 uc 中有许多控件。我要禁用的是我上面提到的“taRemarks”。
  • 首先,这不是ASP.NET Textbox,对我来说,按照命名约定,它是UserControl,里面必须有你的文本框。如果可能,显示UserControlTextArea 的标记

标签: c# html asp.net webforms markup


【解决方案1】:

您的问题不清楚,但肯定是UserControl 而不是 ASP.Net 文本框。因此,您可以像这样禁用 UC 中的文本框:-

方法 1(首选):

在您的 UserControl 代码隐藏中添加公共属性:-

public bool DisableMyTextbox
{
   set { tbTextArea.Enabled = value; }
}

然后您可以简单地使用此属性来禁用 Webform 中的文本框:-

UserControlTextArea.DisableMyTextbox = false; //或 true 启用返回。

方法2:

在 UserControl 类中找到你的文本框,然后禁用它:-

TextBox txt1 = (TextBox)SimpleUserControl1.FindControl("tbTextArea");
txt1.Enabled = false;

【讨论】:

  • 如何获得文本框的正确 ID?就目前而言,在我的标记中,它只是 UserControl,直到页面加载并自动生成 ID。
  • 这是我的 UserControl,如上所述:
  • 好的,但您一定已经注册了,对吧?检查顶部的Register 指令或在Web.Config 文件中搜索它,您将拥有src 或usercontrol 文件的源,您可以检查它。否则,在最坏的情况下,请从开发人员工具中检查其 id,其 id 必须附加您的 UC Id。
  • 我现在明白了,我已经为用户控件文件添加了代码,但仍然无法识别 ID“tbTextArea”。
  • 我现在明白了!一切都有道理,谢谢!我在这方面学到了很多东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-08
  • 1970-01-01
  • 1970-01-01
  • 2012-03-27
相关资源
最近更新 更多