为单个aspx.cs添加两个aspx页面

本文关键字:aspx 两个 页面 单个 cs 添加 | 更新日期: 2023-09-27 18:17:41

我想为单个aspx.cs文件添加两个aspx页面。这可能吗?我需要直接做这个。

namespace WebApplication1
{
    public partial class PROJECT2 : System.Web.UI.Page
    {
    }
}

PROJECT2 aspx . cs应该用于两个aspx页面

为单个aspx.cs添加两个aspx页面

Microsoft不支持

我和微软讨论了这个问题,这里是我从他们那里得到的。

进一步调查后,结果如下。由于智能感知的工作方式,我们不能在涉及aspx.cs文件上的共享代码的场景中支持智能感知。有两种不同的方法可以用来处理这种情况。VS支持的选项是对公共代码元素使用AppCode或usercontrol,然后调用这些方法来实现公共代码库。第二种选择包括以当前使用它的方式使用CodeBehind(没有智能感知),并假设代码对于两个设计页面都是正确的,那么代码应该正确编译,因为它是ASP。。NET支持的场景。谢谢你的反馈。

这是什么意思

Intellisense will not work with both the pages, but only with one page
your code will compile only if both the controls are on both the pages!

这确实违背了共享codeBehind文件的想法。我的场景很可能是两个稍微不同的页面,但后面使用相同的代码。但对于微软来说,两个稍有不同的页面,不能使用相同的代码隐藏文件

理想的场景应该是

Intellisense should pick controls in both the pages
Code should compile if the the control that is accessed is present in either of the two pages.

所以这里是完全适合我的需求的解决方案(再次感谢ps2goat的提示)。

我的两个页面的基本结构是:

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

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

(假设我的页面远远超过2页)

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

这对于从基类继承的标准来说是不可能的,也不可能使用母版页:它们工作得很好,但是完全不知道ASPX服务器控件的子控件。

因此,我创建了一个泛型类文件
[namespace COMMON]
Page.cs

在这个文件中,我复制了两个原始名称空间(它们在代码中是相同的)的"。cs"部分类和"。designer.cs"部分类的内容(显然要注意将名称空间更改为新的名称空间)。

页面。代码隐藏映射从"Page.aspx.cs"answers" a.p page "命名空间更新为"Page.cs"answers"Common "。页"名称空间。

所以,文件从这些改变:

[页面。(每个命名空间一个实例)

<%@ Page Title="Page" Language="C#" MasterPageFile="~/Page.Master" AutoEventWireup="true" CodeBehind="Page.aspx.cs" Inherits="Project.A.Page" %>
<asp:Content ID="ContentB" ContentPlaceHolderID="cBody" runat="server">
    <asp:TextBox ID="txbTest" runat="server" MaxLength="75"></asp:TextBox>
</asp:Content>

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

namespace Project.A
{
    public partial class Page: BasePage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            this.txbTest.Text = "Hello";
        }
    }
}

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

namespace Project.A {
    public partial class Page{
        protected global::System.Web.UI.WebControls.TextBox txbTest;                
    }
}
这些:

[页面。(每个命名空间一个实例)

<%@ Page Title="Page" Language="C#" MasterPageFile="~/Page.Master" AutoEventWireup="true" CodeBehind="Page.cs" Inherits="Project.COMMON.Page" %>
<asp:Content ID="ContentB" ContentPlaceHolderID="cBody" runat="server">
    <asp:TextBox ID="txbTest" runat="server" MaxLength="75"></asp:TextBox>
</asp:Content>

[Page.cs](一个single实例,由旧的。cs和。designer文件的内容组成)

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;                
    }
}
然后我删除了page的。cs和。designer.cs文件的每个实例,留下我需要的结构,如:
~/A/Page.aspx
~/B/Page.aspx
~/COMMON/Page.cs

它就像一个魅力!

摘自ASPX页面可以共享代码背后的文件?