我遇到了一个非常令人沮丧的问题,在一个Web表单中的TreeView控件。我在Visual Studio上使用c#,而且,不可否认,这是我在这个平台上的第一个项目,所以我发现有很多我不知道的注意事项。
我正在做的那一页并不复杂。在网页正文中。在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服务器中的数据,在我的网页类的Page_Load方法中以编程方式填充TreeView。这句话真管用。
现在,我想为TreeView的TreeNodeCheckChanged事件定义事件处理程序。首先,YES,我知道当复选框被更改时,事件不会立即触发;我在网上能找到的关于这个的99%都是人们在抱怨。对于我的应用程序,等待直到按钮被点击是好的。
我遵循MSDN文章中关于事件的做法,将OnTreeNodeCheckChanged属性添加到TreeView控件:
<asp:TreeView ... OnTreeNodeCheckChanged="CheckChangedMethod">
,并在WebPage.aspx.cs:
中为网页类添加了一个相应的方法:protected void CheckChangedMethod( object sender, TreeNodeEventArgs e )
{
StatusLabel.Text = "A checkbox was changed!";
}
但是,当我启动页面时,我得到一个错误屏幕,上面写着:
CS1061: ASP。webpage_aspx'不包含'CheckChangedMethod'的定义,也没有扩展方法'CheckChangedMethod'接受类型为'ASP '的第一个参数。可以找到Webpage_aspx '(您是否缺少using指令或程序集引用?)
我发现,如果我把方法移动到网页上的标签内。Aspx,它成功了!然而,不幸的是,我需要这个方法来访问站点其他部分的类和方法,这在脚本标记中是做不到的(……对吧?)我怎么能得到我的事件处理程序识别的编译器,而不从网页类删除它?
编辑:
总标记如下:
<%@ 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>
嗯…不知道发生了什么,但在修复了我们网站其他地方的错误后,上面的代码神奇地决定开始工作。我不会质疑的