在非编译的.aspx中,是否可以为一个aspx提供2个部分类文件?我正在尝试做类似的事情:
<%@ Page Language="C#" inherits="_Default" src="Default.aspx.cs" src="Default2.aspx.cs" %>
Default和Default2都定义了部分类
更新:是的..它没有被编译或者点数没有实际意义,因为我只是在/ bin目录中查找相应的dll。我需要这个没有编译,因为源需要定期更改。我可能想出一种方法来更新aspx,但我不想这样做。
我使用两个源文件的原因是有很多源代码连接到我的数据库和诸如此类的东西。我有一个人会用db的东西捣乱,而另一个人则用其他逻辑来捣乱。我更喜欢将这些文件分开,这样他们就不必混淆不需要查看的代码
答案 0 :(得分:6)
是和否。是的,你可以拥有任意数量的部分课程。不,你不能(也不必!)在你的Page指令中指定它们。
<%@ Page
Language="C#"
inherits="Default" %>
在Default.aspx.cs中:
public partial class Default
{ /*yadda*/ }
在Default2.aspx.cs中:
public partial class Default
{ /* even more yadda */ }
部分类是编译器的错觉。就CLR而言,它们并不存在。 C#编译器在编译期间将所有部分类拼接在一起;从asp.net编译器的角度来看,只有一个Default类。
从您的更新中发现,您需要的不是多个部分类,而是重构您的代码。你应该放弃部分类的想法,并采用依赖注入/控制反转。分离出你的数据库逻辑和其他关注领域,使用接口定义它们,然后在运行时使用DI容器框架注入所需的“提供者”实现。
这将您的代码分离出来,为您的应用程序提供更大的灵活性,可测试性和易于更新;比将代码分成两个或更多文件要好得多。 DI也很容易理解和实现。我正在使用Unity进行DI并喜欢它。花了大约一天才能加快速度。
答案 1 :(得分:1)
不,最多可以指定一个Src
属性。
答案 2 :(得分:0)
虽然不是您问题的直接答案,您是否考虑从基页继承以合并代码?
在Default.aspx.cs中:
public partial class Default : CustomBasePage
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
在CustomBasePage.cs中:
public class BasePage: System.Web.UI.Page
{
protected override void OnPreInit(EventArgs e)
{
base.OnPreInit(e);
//Your custom code
}
}
如果您需要在default.aspx.cs中覆盖事件方法等,请确保并调用基本方法。