Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.net web服务器控件_Asp.net_Controls - Fatal编程技术网

ASP.net web服务器控件

ASP.net web服务器控件,asp.net,controls,Asp.net,Controls,我有一个关于连接web服务器控件的问题。在我看到的许多示例中,事件处理程序是用私有访问修饰符声明的。我尝试这样做,如图所示: <asp:Label runat="server" ID="lblMessage" Font-Names="Verdana" Text="Hello" /> <br /> <asp:Button runat="server" ID="btnSubmit" text="click me!" onClick="bt

我有一个关于连接web服务器控件的问题。在我看到的许多示例中,事件处理程序是用私有访问修饰符声明的。我尝试这样做,如图所示:

    <asp:Label runat="server" ID="lblMessage" Font-Names="Verdana" Text="Hello" />
        <br />
    <asp:Button runat="server" ID="btnSubmit" text="click me!" onClick="btnSubmit_Click" />
但是,除非我将访问权限更改为protected,否则编译器无法找到click处理程序

按钮事件处理程序是否应该是私有的,如果是,为什么它在我的实例中不起作用

另外,除了使用onClick属性外,还有其他方法可以将事件处理程序连接到在.aspx文件中声明创建的控件吗

提前感谢,,
Yong

这里可能令人困惑的是,许多人都是以视觉方式设计他们的web表单。当他们想要将单击处理程序连接到按钮服务器控件时,通常会双击该按钮或在Visual Studio中选择该按钮,然后按F4键转到其属性并在该窗口中设置其事件。这两种方法中的任何一种都具有以下效果:

  • 在代码隐藏类中创建私有处理程序。它的名称是[控件名称]\u[事件]。在您的情况下,这是btnSubmit\u Click

  • 同样在代码隐藏文件中,每个web服务器控件都有一个对应的代码隐藏类的受保护成员。在Init even中,新创建的处理程序通过以下代码与服务器控件上的单击事件相关联:

    btnSubmit.Click+=btnSubmit\u Click

  • 使用这种方法,处理程序仍然可以是私有的。当您试图在ASPX文件本身中设置处理程序时,就会出现问题。在这种情况下,如您所示,您必须将事件处理程序更新为非私有,或者在ASPX页面本身中定义以下内容:

    <script language="C#" runat="server">
      public void btnSubmit_Click(object sender, EventArgs e)
      {
        ..
      }
    </script>
    
    
    public void btnSubmit\u单击(对象发送者,事件参数e)
    {
    ..
    }
    

    代码隐藏类的私有方法/属性在ASPX页面上是不可见的。

    这里可能令人困惑的是,许多人以可视化方式设计他们的web表单。当他们想要将单击处理程序连接到按钮服务器控件时,通常会双击该按钮或在Visual Studio中选择该按钮,然后按F4键转到其属性并在该窗口中设置其事件。这两种方法中的任何一种都具有以下效果:

  • 在代码隐藏类中创建私有处理程序。它的名称是[控件名称]\u[事件]。在您的情况下,这是btnSubmit\u Click

  • 同样在代码隐藏文件中,每个web服务器控件都有一个对应的代码隐藏类的受保护成员。在Init even中,新创建的处理程序通过以下代码与服务器控件上的单击事件相关联:

    btnSubmit.Click+=btnSubmit\u Click

  • 使用这种方法,处理程序仍然可以是私有的。当您试图在ASPX文件本身中设置处理程序时,就会出现问题。在这种情况下,如您所示,您必须将事件处理程序更新为非私有,或者在ASPX页面本身中定义以下内容:

    <script language="C#" runat="server">
      public void btnSubmit_Click(object sender, EventArgs e)
      {
        ..
      }
    </script>
    
    
    public void btnSubmit\u单击(对象发送者,事件参数e)
    {
    ..
    }
    

    代码隐藏类的私有方法/属性对ASPX页不可见。

    事件处理程序需要受到
    保护。原因是ASP.NET实际上生成了一个新类,该类继承自您在codebehind中定义的类,而不是使用该类本身

    或者,您可以写:

    btnSubmit.Click += new EventHandler(btnSubmit_Click);
    

    在页面加载处理程序中,但我不推荐它。在VB.NET中,我相信您也可以使用
    句柄
    关键字,但它在C#中不可用。

    事件处理程序需要
    保护。原因是ASP.NET实际上生成了一个新类,该类继承自您在codebehind中定义的类,而不是使用该类本身

    或者,您可以写:

    btnSubmit.Click += new EventHandler(btnSubmit_Click);
    

    在页面加载处理程序中,但我不推荐它。在VB.NET中,我相信您也可以使用
    句柄
    关键字,但它在C#中不可用。

    谢谢David,我想这突出了visual studio自动化这么多编码过程的能力的一个缺点,它掩盖了实际上正在发生的事情,并且占用了很多时间,您失去了更深层次的理解。很好的解释。私有处理程序行为只适用于Visual Studio 2003、2005+将其写入ASPX文件并创建受保护的AFAIK方法。谢谢David,我想这突出了Visual Studio自动化这么多编码过程的能力的一个缺点,它掩盖了事实上正在发生的事情,很多时候,你们会失去更深层次的理解。很好的解释。私有处理程序行为仅适用于Visual Studio 2003、2005+将其写入ASPX文件并创建受保护的方法AFAIK。