Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.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
C# ASPX页面能否共享代码隐藏文件?_C#_Asp.net_.net_Inheritance - Fatal编程技术网

C# ASPX页面能否共享代码隐藏文件?

C# ASPX页面能否共享代码隐藏文件?,c#,asp.net,.net,inheritance,C#,Asp.net,.net,Inheritance,假设我有两个具有相同服务器端控件的ASPX页面 ~/TemplateA/Contact.aspx ~/TemplateB/Contact.aspx 默认情况下,它们被映射到各自的代码隐藏文件 ~/TemplateA/Contact.aspx.cs ~/TemplateB/Contact.aspx.cs 相反,我希望他们指向一个单一的、通用的代码隐藏文件,如 ~/Classes/Contact.aspx.cs 我已经让它们继承自一个基本的“Contact”函数类,它公开了整个业务逻辑,但我仍

假设我有两个具有相同服务器端控件的ASPX页面

~/TemplateA/Contact.aspx
~/TemplateB/Contact.aspx
默认情况下,它们被映射到各自的代码隐藏文件

~/TemplateA/Contact.aspx.cs
~/TemplateB/Contact.aspx.cs
相反,我希望他们指向一个单一的、通用的代码隐藏文件,如

~/Classes/Contact.aspx.cs
我已经让它们继承自一个基本的“Contact”函数类,它公开了整个业务逻辑,但我仍然不知道如何将页面的服务器端控件引用到基本的“Contact”类中;例如,我希望能够写:

this.textBox1.Text = "Hello"
在我的基类中,而不是在每个.cs文件中编写它。 显然,“textBox1”在我的基类中不是已知的对象,因为它没有附加设计器文件


可能吗

我要说的是,即使有可能,它也会让事情变得非常肮脏。我会使用继承

~/TemplateA/TemplateA.aspx
~/TemplateB/TemplateB.aspx
~/TemplateB/Contact.aspx

在TemplateA.aspx和TemplateB.aspx继承Contact.aspx的地方,我要说的是,即使有可能,它也会使事物变得非常肮脏。我会使用继承

~/TemplateA/TemplateA.aspx
~/TemplateB/TemplateB.aspx
~/TemplateB/Contact.aspx

TemplateA.aspx和TemplateB.aspx继承Contact.aspx,因此这里的解决方案非常适合我的需要(再次感谢ps2goat的提示)

我两页的基本结构是:

[namespace A]
Page.aspx 
Page.aspx.cs
Page.aspx.designer.cs

(假设我有超过2页)

我确实需要删除.cs和.designer.cs文件,同时能够引用.aspx页面中声明的服务器控件

这在标准继承基类和使用母版页时是不可能的:它们工作得很好,但完全不知道子ASPX服务器控件

因此,我创建了一个通用类文件

[namespace COMMON]
Page.cs
在这个文件中,我复制了两个原始名称空间的“.cs”部分类和“.designer.cs”部分类的内容(显然是为了将名称空间更改为新名称空间)(它们在代码上完全相同)

在page.aspx文件中,codebehind映射从“page.aspx.cs”和“A.page”命名空间更新为“page.cs”和“Common.page”命名空间

因此,文件已从以下内容更改:

[Page.aspx](每个命名空间一个实例)

[Page.aspx.designer.cs](自动生成,每个命名空间一个实例)

对这些:

[Page.aspx](每个命名空间一个实例)

然后,我删除了页面的.cs和.designer.cs文件的每个实例,并根据需要留下一个结构,如:

~/A/Page.aspx
~/B/Page.aspx
~/COMMON/Page.cs
它就像一个符咒


因此,最后,我可以说,在投影web软件时,aspx仍然是一个选择,该项目的MVC移植可以等待。

因此,这里的解决方案非常适合我的需要(再次感谢ps2goat的提示)

我两页的基本结构是:

[namespace A]
Page.aspx 
Page.aspx.cs
Page.aspx.designer.cs

(假设我有超过2页)

我确实需要删除.cs和.designer.cs文件,同时能够引用.aspx页面中声明的服务器控件

这在标准继承基类和使用母版页时是不可能的:它们工作得很好,但完全不知道子ASPX服务器控件

因此,我创建了一个通用类文件

[namespace COMMON]
Page.cs
在这个文件中,我复制了两个原始名称空间的“.cs”部分类和“.designer.cs”部分类的内容(显然是为了将名称空间更改为新名称空间)(它们在代码上完全相同)

在page.aspx文件中,codebehind映射从“page.aspx.cs”和“A.page”命名空间更新为“page.cs”和“Common.page”命名空间

因此,文件已从以下内容更改:

[Page.aspx](每个命名空间一个实例)

[Page.aspx.designer.cs](自动生成,每个命名空间一个实例)

对这些:

[Page.aspx](每个命名空间一个实例)

然后,我删除了页面的.cs和.designer.cs文件的每个实例,并根据需要留下一个结构,如:

~/A/Page.aspx
~/B/Page.aspx
~/COMMON/Page.cs
它就像一个符咒


所以,最后,我可以说,在投影web软件时,aspx仍然是一个选择,该项目的MVC移植可以等待。

您尝试过使用分部类吗?这就是页面所使用的,尽管我还没有尝试过这样做。最好的方法是拥有一个服务器控件(所有代码),这两个代码可以继承。@ps2goat-你真是个天才!我正在做一些尝试,它似乎有效-我会让你更新,因为它可能会对其他人有所帮助too@revisors:这不是一个从基类简单继承的问题(如问题中明确指出的),因此它与其他问题中已经提供的答案不同。我将很快发布似乎有效的解决方案,多亏了ps2goat hintMaster页面,我认为这里会很有用。@littlesweets就像Garrison说的那样。。。从您的示例来看,您似乎只是在尝试在模板之间切换。。。你可以用母版页和主题做一些事情。用户控件更简单。您尝试过使用分部类吗?这就是页面所使用的,尽管我还没有尝试过这样做。最好的方法是拥有一个服务器控件(所有代码),这两个代码可以继承。@ps2goat-你真是个天才!我正在做一些尝试,它似乎有效-我会让你更新,因为它可能会对其他人有所帮助too@revisors:这不是一个从基类简单继承的问题(如问题中明确指出的),因此它与其他问题中已经提供的答案不同。我将很快发布似乎有效的解决方案,多亏了ps2goat hintMaster页面,我认为这里会很有用。@littlesweets就像Garrison说的那样。。。从您的示例来看,您似乎只是在尝试在模板之间切换。。。你可以用母版页和主题做一些事情。用户控制更容易。
namespace Project.COMMON
{
    public partial class Page: BasePage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            this.txbTest.Text = "Hello";
        }
    }

    public partial class Page{
        protected global::System.Web.UI.WebControls.TextBox txbTest;                
    }
}
~/A/Page.aspx
~/B/Page.aspx
~/COMMON/Page.cs