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

时间:2015-10-14 07:41:55

标签: c# asp.net

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

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

PROJECT2 ASPX.CS应该用于两个aspx页面。

2 个答案:

答案 0 :(得分:0)

微软并不真正支持

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

经过进一步调查,结果如下。由于Intellisense的工作方式,我们不能支持涉及aspx.cs文件后面的共享代码的场景的Intellisense。可以采用两种不同的方法来处理这种情况。 VS中支持的选项是使用AppCode或UserControll作为公共代码元素,然后调用这些方法来实现公共代码库。第二个选项涉及以您当前使用它的方式使用CodeBehind(没有Intellisense),并且假设代码对于两个设计页面都是正确的,代码应该正确编译,因为它是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.

答案 1 :(得分:0)

所以这里的解决方案非常适合我的需求(再次感谢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文件中,代码隐藏映射已从“Page.aspx.cs”和“A.Page”命名空间更新为“Page.cs”和“Common.Page”命名空间。

所以,文件从这些改变了:

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

<%@ 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.aspx](每个命名空间一个实例)

<%@ 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](一个SINGULAR实例,由旧.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;                
    }
}

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

~/A/Page.aspx
~/B/Page.aspx
~/COMMON/Page.cs

它就像一个魅力!

取自Can ASPX pages share code behind file?