none
Server.Transfer() 方法 应用问题 。 RRS feed

  • 问题


  • 代码如下:
    public partial class Web_RegularDocMag_CreateDocument : System.Web.UI.Page
    {
      

        private string Doctype
        {
            get
            {
                return this.DDlDocType.SelectedValue;
            }
        }

        public string isCheck
        {
            get
            {
                return this.hidisEdit.Value;
            }
        }

        public string DocPath
        {
            get
            {
                return this.hidDocPath.Value;
            }
        }


        public string DocExpandName
        {
            get
            {
                return this.hidDoctype.Value;
            }
        }

        public string isNew
        {
            get
            {
                return this.hidisEdit.Value;
            }
        }

      
       public void Page_Load(object sender, EventArgs e)
        {
            Server.Transfer("EditsoaDoc.aspx",true);

        }
       
            
        }



    页面 EditsoaDoc.aspx 后台代码如下:


    public partial class Web_RegularDocMag_EditsoaDoc : System.Web.UI.Page
    {
        public  void Page_Load(object sender, EventArgs e)
        {
            //Web_RegularDocMag_CreateDocument aa;
           
           
            if (!Page.IsPostBack)
            {
                Web_RegularDocMag_CreateDocument aa;  //    
                aa = (Web_RegularDocMag_CreateDocument)Context.Handler;
                string test = aa.Doctype ;

            }
        }
    }

    代码这样写有什么错误吗?为什么会出现:
    CS0246: 找不到类型或命名空间名称“Web_RegularDocMag_CreateDocument”(是否缺少 using 指令或程序集引用?)”的错误呢? 


    wyh
    • 已移动 孟宪会Moderator 2009年10月12日 5:28 (发件人:.NET Framework 一般性问题讨论区)
    2009年10月12日 1:57

答案

  • 你好,Web_RegularDocMag_CreateDocument和Web_RegularDocMag_EditsoaDoc 是在同一命名空间下和程序集吗
    如果不是需要导入Web_RegularDocMag_CreateDocument命名空间,同时检查下
    Web_RegularDocMag_CreateDocument的可访问性的修饰符,看下是否是public

    同时我怀疑你通过Context.Handler获取Web_RegularDocMag_CreateDocument的可行性,因为这里的Handler应该是
    Web_RegularDocMag_EditsoaDoc这个页面的Handler了,你查看Transfer方法的源码可以知道的
    如果你要跨页访问可以通过PreviousPage

    在EditsoaDoc这个aspx里边添加
    <%@ PreviousPageType VirtualPath="~/Web_RegularDocMag_CreateDocument.aspx" %> 


    然后通过if (Page.PreviousPage != null)
    {}

    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    • 已标记为答案 huiaiyun7 2009年10月12日 7:35
    2009年10月12日 2:12
    版主
  • 能麻烦告诉下怎么查看他们的命名空间吗?


    wyh
    • 已标记为答案 huiaiyun7 2009年10月12日 7:35
    2009年10月12日 2:23
  • asp.net 2.0之后只能这样写了

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="EditsoaDoc.aspx.cs" Inherits="EditsoaDoc" %>
    <%@ PreviousPageType VirtualPath="~/Web_RegularDocMag_CreateDocument.aspx" %>


    EditsoaDoc.aspx.cs里:

    Web_RegularDocMag_CreateDocument d = Context.Handler as Web_RegularDocMag_CreateDocument;
    Response.Write(d.isNew);
    【孟子E章】
    • 已标记为答案 huiaiyun7 2009年10月12日 7:35
    2009年10月12日 5:56
    版主
  • 用跨页技术 可以同样达到效果
     你这个方式有个缺点 没有保存view视图状态 转到另一个页面
       <asp:Button ID="Button1" runat="server" Text="Button" PostBackUrl="EditsoaDoc.aspx" />
      
    页面 EditsoaDoc.aspx
    <%@ PreviousPageType VirtualPath="~/Web_RegularDocMag_CreateDocument.aspx" %>


    后台代码如下:


    public partial class Web_RegularDocMag_EditsoaDoc : System.Web.UI.Page
    {
        public  void Page_Load(object sender, EventArgs e)
        {
             if(Page.PreviousPage!=null)
          {

           string d=    this.PreviousPage.Doctype
          }
            }
        }
    }

    • 已标记为答案 huiaiyun7 2009年10月12日 7:35
    2009年10月12日 7:34

全部回复

  • 你好,Web_RegularDocMag_CreateDocument和Web_RegularDocMag_EditsoaDoc 是在同一命名空间下和程序集吗
    如果不是需要导入Web_RegularDocMag_CreateDocument命名空间,同时检查下
    Web_RegularDocMag_CreateDocument的可访问性的修饰符,看下是否是public

    同时我怀疑你通过Context.Handler获取Web_RegularDocMag_CreateDocument的可行性,因为这里的Handler应该是
    Web_RegularDocMag_EditsoaDoc这个页面的Handler了,你查看Transfer方法的源码可以知道的
    如果你要跨页访问可以通过PreviousPage

    在EditsoaDoc这个aspx里边添加
    <%@ PreviousPageType VirtualPath="~/Web_RegularDocMag_CreateDocument.aspx" %> 


    然后通过if (Page.PreviousPage != null)
    {}

    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    • 已标记为答案 huiaiyun7 2009年10月12日 7:35
    2009年10月12日 2:12
    版主
  • 您好,
    1、如果在同一个项目中,检查一下是否在同一个命名空间下。
    2、如果不在同一个项目,请添加引用

    另,即使通过编译,个人感觉:
    Web_RegularDocMag_CreateDocument aa;  //    
                aa = (Web_RegularDocMag_CreateDocument)Context.Handler;

    这段代码是有问题的,应该获取不到Web_RegularDocMag_CreateDocument实例。
    2009年10月12日 2:16
    版主
  • 能麻烦告诉下怎么查看他们的命名空间吗?


    wyh
    • 已标记为答案 huiaiyun7 2009年10月12日 7:35
    2009年10月12日 2:23
  • 您好,通常类定义的外面就是命名空间名,除非您创建的是Web站点的项目。如果是,Web站点默认在同一个命名空间下。

    另一个简单的方法:在IDE环境中把鼠标移到Web_RegularDocMag_CreateDocument上,如果引用或是在同一个程序集下,观察这个单词的结尾会显示一个可选项。
    2009年10月12日 2:48
    版主
  • 是一个web站点项目,这两个页面文件是在同一个文件夹下面的。


    wyh
    2009年10月12日 3:12
  • 那应该没有问题,我这里也测试过,您可以试一下IDE的智能感知功能。看看能不能找到Web_RegularDocMag_CreateDocument。

    另,请注意1987raymond和我提到的担忧。
    2009年10月12日 3:32
    版主
  • 多谢回复。如果还是不行。还得请教给位高手。


    wyh
    2009年10月12日 5:09
  • 是不是我的IDE环境有问题呢。这两个页面是在一个文件夹下面的。然后在Web_RegularDocMag_EditsoaDoc  里面就是找不到
    Web_RegularDocMag_CreateDocument  。真是没法子了。

    wyh
    2009年10月12日 5:12
  • 这里不需要添加特使的应用吧。
    wyh
    2009年10月12日 5:13
  • 你好!
         你添加using (Web_RegularDocMag_CreateDocument 的类定义所在的命名空间的名字!);

    周雪峰
    2009年10月12日 5:18
    版主
  • 哈,有点晕,没有不需要添加什么特别的应用。
    您尝试一下关闭IDE,打开后重新编译。
    或者右击项目,点击清理命令,然后重新编译,试试。
    2009年10月12日 5:20
    版主
  • 白到家了我。Web_RegularDocMag_CreateDocument 这种类的命名空间从哪里看呢? 


    wyh
    2009年10月12日 5:21
  • 白到家了我。Web_RegularDocMag_CreateDocument 这种类的命名空间从哪里看呢? 


    wyh

    其实我刚才已说明了,如果是创建web网站项目的话,是不用命名空间的。换句话说看不到或者说没有。或许微软认为Web网站是为了小型网站服务的,所以没有自动生成命名空间。如果您创建web应用程序或类库就可以看见。当然您可以自己添加。

    因为您创建的是web网站项目,我想不是命名空间的问题,试试上面我介绍的清缓存的方法。
    2009年10月12日 5:35
    版主
  • asp.net 2.0之后只能这样写了

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="EditsoaDoc.aspx.cs" Inherits="EditsoaDoc" %>
    <%@ PreviousPageType VirtualPath="~/Web_RegularDocMag_CreateDocument.aspx" %>


    EditsoaDoc.aspx.cs里:

    Web_RegularDocMag_CreateDocument d = Context.Handler as Web_RegularDocMag_CreateDocument;
    Response.Write(d.isNew);
    【孟子E章】
    • 已标记为答案 huiaiyun7 2009年10月12日 7:35
    2009年10月12日 5:56
    版主
  • <%@ PreviousPageType VirtualPath="~/xxxx.aspx" %>

    xxxx是你前面的那个页面文件名
    【孟子E章】
    2009年10月12日 5:58
    版主
  • 用跨页技术 可以同样达到效果
     你这个方式有个缺点 没有保存view视图状态 转到另一个页面
       <asp:Button ID="Button1" runat="server" Text="Button" PostBackUrl="EditsoaDoc.aspx" />
      
    页面 EditsoaDoc.aspx
    <%@ PreviousPageType VirtualPath="~/Web_RegularDocMag_CreateDocument.aspx" %>


    后台代码如下:


    public partial class Web_RegularDocMag_EditsoaDoc : System.Web.UI.Page
    {
        public  void Page_Load(object sender, EventArgs e)
        {
             if(Page.PreviousPage!=null)
          {

           string d=    this.PreviousPage.Doctype
          }
            }
        }
    }

    • 已标记为答案 huiaiyun7 2009年10月12日 7:35
    2009年10月12日 7:34
  • 白到家了我。Web_RegularDocMag_CreateDocument 这种类的命名空间从哪里看呢?  


    wyh

    你好!
         你找到这个定义这个类的代码文件,查看namespace关键字后面的名字
    周雪峰
    2009年10月12日 11:10
    版主