如何让我的asp:TreeView控件识别我写的TreeNodeCheckChanged方法?

时间:2014-06-03 21:24:29

标签: c# asp.net event-handling treeview

我对Web窗体中的TreeView控件有一个非常令人沮丧的问题。我在Visual Studio上使用C#,而且,不可否认,这是我在平台上的第一个项目,所以我发现有很多警告我不知道。

我正在处理的页面并不复杂。在WebPage.aspx的主体中,我声明了一个空的TreeView控件,以及一个显示输出的Label(用于测试)和一个用于引发回发的Button:

<asp:TreeView ID="SimpleTreeView" runat="server">
</asp:TreeView>
<asp:Label ID="StatusLabel" runat="server">No change yet.</asp:Label>
<asp:Button ID="SaveButton" runat="server" Text="Save Changes" PostBackUrl="~/WebPage.aspx" />

我基于SQL服务器中的数据,以编程方式在我的WebPage类的Page_Load方法中填充TreeView。那部分就像一个魅力。

现在,我想为TreeView的TreeNodeCheckChanged事件定义事件处理程序。首先,是的,我知道当复选框被更改时,事件不会立即触发;我能在互联网上找到的有关此事的99%是人们在抱怨这一点。对于我的应用程序,等到单击按钮就可以了。

我通过将OnTreeNodeCheckChanged属性添加到TreeView控件来跟踪the MSDN article on the event的作用:

<asp:TreeView ... OnTreeNodeCheckChanged="CheckChangedMethod">

并在WebPage.aspx.cs中为WebPage类添加了相应的方法:

protected void CheckChangedMethod( object sender, TreeNodeEventArgs e )
{
    StatusLabel.Text = "A checkbox was changed!";
}

但是,当我启动页面时,会出现一个错误屏幕,上面写着:

CS1061:&#39; ASP.webpage_aspx&#39;不包含&#39; CheckChangedMethod&#39;的定义并没有扩展方法&#39; CheckChangedMethod&#39;接受类型&#39; ASP.webpage_aspx&#39;的第一个参数。可以找到(你错过了使用指令或汇编引用吗?)

我发现如果我将方法移到WebPage.aspx上的标签内,它就可以了!不幸的是,我需要这种方法来访问网站其他部分的类和方法,我不能在脚本标记内(...对吗?)。如何在不将其从WebPage类中删除的情况下使编译器识别我的事件处理程序?

修改

总标记如下:

<%@ Page Title="Web Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireUp="true" CodeBehind="WebPage.aspx.cs" Inherits="Project.WebPage" %>
<%@ MasterType VirtualPath="~/Site.Master" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolKit" %>

<asp:Content ID="Content1" ContentPlaceHolder="HeadContent" runat="server">
    <!-- This is where I placed the script tag to test the method -->
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolder="MainContent" runat="server">
    <asp:ScriptManager ID="ScriptManager" runat="server"></asp:ScriptManager>
    <h2><em>Headline</em></h2>
    <br />
    <asp:TreeView ID="SimpleTreeView" runat="server" ExpandDepth="0" ShowCheckBoxes="All">
    </asp:TreeView>
    <asp:Label ID="StatusLabel" runat="server">No change yet.</asp:Label>
    <asp:Button ID="SaveButton" runat="server" Text="Save Changes" PostBackUrl="~/WebPage.aspx" />
</asp:Content>

1 个答案:

答案 0 :(得分:0)

嗯......不确定发生了什么,但在修复了我们网站上其他地方的错误后,上面的代码神奇地决定开始工作。我不打算质疑它。