这里有类似的帖子。我只想澄清一些事情。我在测试项目中实现了这一点。我创建了两个页面page1.aspx和page.aspx是除名称之外的彼此的副本。我对它们进行了配置,以便它们使用相同的后端编码文件。
page1.axpx - > page.aspx.cs page2.aspx - > (上面的代码)
我的问题是,
避免额外的代码并加强维护是个好主意吗?
虽然每个人都在上面的测试项目中工作。在我的实际项目中,我得到了这个非常常见的错误
当前上下文asp
中不存在名称“xxxx”由于上述错误,代码无法编译。如果我从浏览器运行应用程序,它确实有效(或似乎是)。我的问题是,为什么我没有在一个应用程序中而不是另一个应用程序中收到此错误。此问题现已修复。但是想知道为什么我首先得到这个错误,然后在这里和那里玩它,错误就消失了。
我相信这确实是微软的错误。怎么样?我在这里解释一下。
Page1.aspx.cs实际上是使用Page.aspx页面而不是page1.aspx控件。 intellisence只显示Page1.aspx控件(如果你将控件添加到page2,它不会显示在intellesense中,如果你将它添加到Page1,它将被显示)。由于两个页面上的控件完全相同(包括名称和ID),因此它们奇迹般地起作用。有时编译器不喜欢它并且会给你错误(没有明显的原因)。微软应该更优雅地解决这些问题而不是把它扔给我们。
所以它解决了我,但任何人都可以解释这种神秘的行为。
答案 0 :(得分:8)
最好将这些内容放在一个user control中并在两个页面中使用该用户控件。这样做可以很容易地进行维护。
答案 1 :(得分:0)
我认为您应该让页面在文件后面有自己的代码,并将大部分重复的代码放在一个可以从两个页面中使用的单独的类中。
这背后的原因是,对于没有深入参与项目的人(比如你,几个月后......)来编辑后面的代码而不会意识到它影响多个页面很容易。
当您手动更改页面中的类名或文件后面的代码时,可能不会更新包含分部类的隐藏设计文件。您可以通过在项目中搜索类名称或通过单击指向该文件的错误消息来访问隐藏文件。
答案 2 :(得分:0)
微软并不真正支持
我与微软讨论了这个问题,这是我从他们那里得到的。
After further investigation, here are the results. Due to the manner in which Intellisense works, we cannot support Intellisense for scenarios involving a shared code behind on the aspx.cs files. There are two different approaches that one can take to deal with this scenario. The option supported in VS is using either AppCode or UserControll for the common code elements and then calling those methods to achieve a common code base. The second option involves using the CodeBehind in the manner that you are currently using it (without Intellisense), and assuming that the code is correct with respect to both design pages, the code should compile correctly since it is an ASP.NET supported scenario. Thank you for your feedback.
所以这就是
这实际上违背了拥有共享codeBehind文件的想法。我的场景很可能是两个略有不同的页面,后面使用相同的代码。但对于微软,两个略有不同的页面,不能使用相同的代码隐藏文件
理想情景应该是
答案 3 :(得分:0)
使用页面之间共享的类绝对没问题。它已经使用了一段时间。然而,最好的方法是;如果您创建基类并继承该类而不是System.Web.UI.Page:
请参阅以下链接:
答案 4 :(得分:0)
Class Name = CsForAllPages.cs 内容:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI.WebControls;
public partial class general : System.Web.UI.Page
{
// Your Same Code For all .aspx Pages
}
在下一个aspx页面集中
<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true"
CodeFile="~/CsForAllPages.cs " Inherits="general" %>