经典论坛's Archiver

马乔 发表于 2008-7-4 14:28

FindControl自定义控件 找不到命名空间

如题:一个奇怪的问题,困扰!!请看如下:
[b]//文件parent.aspx代码如下[/b]
<%@ Page language="c#" src="parent.aspx.cs" AutoEventWireup="false" Inherits="test.parent" %>
<%@ Register TagPrefix="subpage" TagName="mysub" Src="subpage.ascx" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
     <HEAD>
         <title>parent</title>
         <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
         <meta name="CODE_LANGUAGE" Content="C#">
         <meta name="vs_defaultClientScript" content="JavaScript">
         <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
     </HEAD>
     <body>
         <form id="Form1" method="post" runat="server">
              <P>
                   <subpage:mysub id="top" runat="server"></subpage:mysub></P>
              <P>
                   <asp:TextBox id="parentText" runat="server">父级页面文本框</asp:TextBox>
                   <asp:Button id="parentButton" runat="server" Text="父级页面按钮"></asp:Button></P>
         </form>
     </body>
</HTML>

[b]//文件parent.aspx.cs代码如下:[/b]
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace test
{
     /// <summary>
     /// parent 的摘要说明。
     /// </summary>
     public class parent : System.Web.UI.Page
     {
         public System.Web.UI.WebControls.TextBox parentText;
         protected System.Web.UI.WebControls.Button parentButton;
         private void Page_Load(object sender, System.EventArgs e)
         {
              // 在此处放置用户代码以初始化页面
           }
         #region Web 窗体设计器生成的代码
          override protected void OnInit(EventArgs e)
         {
            //
            // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
              //
            InitializeComponent();
            base.OnInit(e);
        }
         /// <summary>
         /// 设计器支持所需的方法 - 不要使用代码编辑器修改
        /// 此方法的内容。
         /// </summary>
         private void InitializeComponent()
         {   
              this.parentButton.Click += new System.EventHandler(this.parentButton_Click);
              this.Load += new System.EventHandler(this.Page_Load);
         }
         #endregion
         private void parentButton_Click(object sender, System.EventArgs e)
         {
             this.parentText.Text = "父级页面点击改变的";
             [color=Red] ((subpage)this.FindControl("top")).subText.Text = "父级页面点击改变的";[/color]
         }
     }
}

[b]//文件subpage.ascx代码如下:[/b]
<%@ Control Language="c#" AutoEventWireup="false" src="subpage.ascx.cs" [color=Red]Inherits="test.subpage"[/color] TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
    <FONT face="宋体">
     <asp:TextBox id="subText" runat="server">自定控件文本框</asp:TextBox>
     <asp:Button id="Button1" runat="server" Text="自定控件按钮"></asp:Button></FONT>

[b]//文件subpage.ascx.cs代码如下[/b]

namespace test
{
     using System;
     using System.Data;
     using System.Drawing;
     using System.Web;
     using System.Web.UI.WebControls;
     using System.Web.UI.HtmlControls;
     /// <summary>
     ///      subpage 的摘要说明。
     /// </summary>
     [color=Red]public class subpage : System.Web.UI.UserControl[/color]
     {
         protected System.Web.UI.WebControls.Button Button1;
         public System.Web.UI.WebControls.TextBox subText;
         private void Page_Load(object sender, System.EventArgs e)
         {
             if (!this.IsPostBack)
              {}
         }
         #region Web 窗体设计器生成的代码
         override protected void OnInit(EventArgs e)
         {
             //
             // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
              //
              InitializeComponent();
              base.OnInit(e);
         }
         /// <summary>
         ///      设计器支持所需的方法 - 不要使用代码编辑器
          ///      修改此方法的内容。
         /// </summary>
         private void InitializeComponent()
         {
              this.Button1.Click += new System.EventHandler(this.Button1_Click);
              this.Load += new System.EventHandler(this.Page_Load);
         }
         #endregion
         private void Button1_Click(object sender, System.EventArgs e)
         {
              this.subText.Text = "这是子控件按钮点击的。";
              ((TextBox)this.Parent.FindControl("parentText")).Text = "这是子控件按钮点击的。";
         }
     }
}


[color=Green]现在我做的是将红色字体处的subpage类名改写成subpage2就会出现这样的错误,不知道为什么了,所有在此请问高路高手指点一下。[/color]
编译器错误消息: CS0246: 找不到类型或命名空间名称“subpage2”(是否缺少 using 指令或程序集引用?)
源错误:
行 90:               this.parentText.Text = "父级页面点击改变的";
行 91:
行 92:               ((subpage2)this.FindControl("top")).subText.Text = "父级页面点击改变的";
行 93:
行 94:          }

flash665 发表于 2008-7-4 14:39

继承不存在的类可以吗?

马乔 发表于 2008-7-4 15:12

没改之前运行是可以的,但是改了之后就会那样报错了!之前在网上查资料说:只要把它们都放在同一个命名空间下就没问题了,但是现在还是有意外呀!

[[i] 本帖最后由 马乔 于 2008-7-4 15:13 编辑 [/i]]

马乔 发表于 2008-7-7 17:23

感觉是不是程序运行的时候,已经在服务器里生成了一个临时的dll文件,后来程序再加载的时候,它只认那个先生成的dll文件呀?

skybot 发表于 2008-7-7 17:39

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
怎么不见引用你的空间

马乔 发表于 2008-7-7 18:16

您说的是这样:
using test;
可是还是不行!
问题可能没有那么简单:因为如果把引用的类名subpage改成其它的名称(例如subpageA,或者其它任何名称)后,就会报错的,没改前是可以正常运行的。

[[i] 本帖最后由 马乔 于 2008-7-7 18:25 编辑 [/i]]

omeweb 发表于 2008-7-10 11:44

subpage2存在吗,我怎么没看到??

马乔 发表于 2008-7-10 14:42

把所有有类名subpage的地方,都改成subpage2

页: [1]



Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.