Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.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# 避免在asp.net c的每个页面中重复代码#_C#_Asp.net_Oop_Inheritance - Fatal编程技术网

C# 避免在asp.net c的每个页面中重复代码#

C# 避免在asp.net c的每个页面中重复代码#,c#,asp.net,oop,inheritance,C#,Asp.net,Oop,Inheritance,我开发了一个网站,在首页和控制面板上都有CRUD功能。我发现在尝试连接和CRUD时,我为每个页面编写了相同的代码 我没有足够的时间研究如何优化我的代码,我只是写了我需要的。我也很痛苦。但我再也没有机会了 例如: 我有一个数据库,当然我需要一个连接字符串。我需要把这些记录读入blogs.aspx页面。 在另一个页面news.aspx中,我需要再次建立一个新连接,并创建一个新的Sqlconnection实例 正如我所说的,我现在有40多页,有很多重复的db连接、datagridview填充代码 我的

我开发了一个网站,在首页和控制面板上都有CRUD功能。我发现在尝试连接和CRUD时,我为每个页面编写了相同的代码

我没有足够的时间研究如何优化我的代码,我只是写了我需要的。我也很痛苦。但我再也没有机会了

例如:

我有一个数据库,当然我需要一个连接字符串。我需要把这些记录读入blogs.aspx页面。 在另一个页面news.aspx中,我需要再次建立一个新连接,并创建一个新的Sqlconnection实例

正如我所说的,我现在有40多页,有很多重复的db连接、datagridview填充代码

我的问题:

  • 在母版页(Site.master)中定义连接、DataTable、DataAdapter和命令实例是一种好方法吗?或者封装的概念会阻止我吗

  • 如果我写了一个名为konnekt.cs的类,我将如何将其对象继承到当前页面?换句话说,我如何从当前页面扩展到konnekt.cs

  • 也许我会得到反对票,但我认为学习这些概念是值得的。 我是c#和其他编程语言的新手


    谢谢您的提示。

    您可以在其他类中定义这些方法,然后从代码隐藏中调用它们。或者在公共基类中定义其中的一些


    2您必须对page进行子类化,然后您可以创建自己的基类,您可以在其他类中定义这些方法,然后从代码隐藏中调用它们。或者在公共基类中定义其中的一些


    2您必须对page进行子类化,然后才能创建自己的基类。您需要做的是学习“关注点分离”的概念。这基本上意味着你要根据代码的功能来划分代码。现在(根据我对您的问题的理解),您的所有代码都在一个地方。正如你所注意到的,这不是一件好事。当然它现在可以工作了,但是一旦你需要修改,你就会遇到问题

    最基本的是,您需要将处理数据库中数据的代码(通常称为数据访问层)和显示该数据的代码(表示层)分开。加载页面(表示层)时,它会调用数据访问层从中获取数据(页面不会直接调用数据库),以此类推。通常,在这两个层之间有第三层称为业务层,具有业务规则逻辑

    在母版页(Site.master)中定义连接、DataTable、DataAdapter和命令实例是一种好方法吗?或者封装概念会阻碍我吗?

    那不是个好主意。母版页属于演示文稿,因此在其中放入任何直接调用DB的内容都是不可能的

    如果我编写了一个名为konnekt.cs的类,我将如何将其对象继承到当前页面?换句话说,我如何从当前页面扩展到konnekt.cs?


    再一次,不要直接从页面调用DB。构建另一个连接到DB的类,让页面调用该类。

    您需要做的是学习“关注点分离”的概念。这基本上意味着你要根据代码的功能来划分代码。现在(根据我对您的问题的理解),您的所有代码都在一个地方。正如你所注意到的,这不是一件好事。当然它现在可以工作了,但是一旦你需要修改,你就会遇到问题

    最基本的是,您需要将处理数据库中数据的代码(通常称为数据访问层)和显示该数据的代码(表示层)分开。加载页面(表示层)时,它会调用数据访问层从中获取数据(页面不会直接调用数据库),以此类推。通常,在这两个层之间有第三层称为业务层,具有业务规则逻辑

    在母版页(Site.master)中定义连接、DataTable、DataAdapter和命令实例是一种好方法吗?或者封装概念会阻碍我吗?

    那不是个好主意。母版页属于演示文稿,因此在其中放入任何直接调用DB的内容都是不可能的

    如果我编写了一个名为konnekt.cs的类,我将如何将其对象继承到当前页面?换句话说,我如何从当前页面扩展到konnekt.cs?

    再一次,不要直接从页面调用DB。构造另一个连接到DB的类,让页面调用该类。

    我的建议是在pages code中丢弃DB代码。。使用应用程序代码文件夹

    在页面文件代码中,必须编写方法/属性/etc来执行页面工作,而不是数据库工作

    对于通用页面代码,您可以将其放在c文件中(始终在App#u代码下)

    通过扩展
    System.Web.UI.Page

    示例App_代码/PageBase.cs:

    public class PageBase : System.Web.UI.Page
    {
        // common code
    }
    
    示例Default.aspx.cs:

    public partial class _Default : PageBase // instead of System.Web.UI.Page
    {
    
    }
    
    比如,我的建议是在代码页中丢弃db代码。。使用应用程序代码文件夹

    在页面文件代码中,必须编写方法/属性/etc来执行页面工作,而不是数据库工作

    对于通用页面代码,您可以将其放在c文件中(始终在App#u代码下)

    通过扩展
    System.Web.UI.Page

    示例App_代码/PageBase.cs:

    public class PageBase : System.Web.UI.Page
    {
        // common code
    }
    
    示例Default.aspx.cs:

    public partial class _Default : PageBase // instead of System.Web.UI.Page
    {
    
    }
    

    什么是“2天内有资格获得赏金的问题”?我做错什么了吗?没有赏金可以让你花一些时间来更快地得到答案。回答这个问题的人会得到额外的“赏金”作为奖励。没有重复的代码是好的。但是对于你的特殊情况,什么更好的决定需要由你来做。。。麦