控制未被声明。 由于其保护级别,它可能无法访问

我真的陷入困境,我尝试了所有其他的例子,但没有任何工作。 我对ASP.NET很新,但学得很快!

我想使用jQuery datepicker,我插入这个脚本

 <script>
          $(document).ready(function () {
              $(function () {
                  $("#" + '<%=txtDOB.ClientID%>').datepicker();
            });
        });
  </script>

和我在aspx页面上的控制是

<asp:TextBox ID="txtDOB" CssClass="form-control" runat="server"></asp:TextBox>

只要关闭服务器标记%> ,红线就会出现在txtDOB控制下,并显示:

没有声明txtDOB。 由于其保护级别,它可能无法访问。

我已经在代码背后公开了该类,但没有任何区别。 我也将脚本移到了页面的底部。 如果我将asp文本框更改为HTML输入,它可以正常工作。


它可以正常使用ASP.NET TextBox。 因此,它必须与你的控制所在的位置有关。 例如,如果它位于Repeater或Grid内部,您将无法直接使用它的ID,因为框架将在运行时为每行生成唯一的ID。

在页面上创建一个简单的网页表单,而不需要其他控件,并且您会发现它可以像您一样使用。


尝试使用静态ID模式:

<script>
          $(document).ready(function () {
                  $("#txtDOB").datepicker();
        });
</script>

它使得客户端脚本更容易(特别是当您将其移动到外部.js文件以利用缓存时),并且对ASP控件进行简单更改:

<asp:TextBox ID="txtDOB" CssClass="form-control" runat="server" ClientIDMode="Static"/>


您可以使用不同类型的jQuery选择器来选择该ID,如下所示:

<script>
    $(document).ready(function () {
        $("input[id$=_txtDOB]").datepicker();
    });
</script>

由于使用了CreateUserWizard控件,该选择器将解释正被添加到ID开头的文本。 它比您目前正在做的更干净,并且您可以使用原始的HTML。

<asp:TextBox ID="txtDOB" CssClass="form-control" runat="server"></asp:TextBox>
链接地址: http://www.djcxy.com/p/65215.html

上一篇: Control is not declared. It may be inaccessible due to its protection level

下一篇: Split code behind into multiple files