【问题标题】:How to pass a class into another class to a codebehind?如何将一个类传递给另一个类到代码隐藏?
【发布时间】:2010-08-03 15:58:07
【问题描述】:

如何将一个类传递给另一个类到代码隐藏?

当我调试并检查 Default.aspx 页面中的 myCategoryObj 时,我可以看到对象在调试中。我究竟做错了什么?

我知道我可以在 Default.aspx 中创建对象,但我不应该这样做 我应该能够调用业务逻辑层并请求返回一个对象,然后填充该对象并将其传递回业务逻辑要保存的图层(插入或更新)。

我希望这是有道理的。

Default.aspx

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SC1.Models.OBJ;
using SC1.Models.BLL;
using SC1.Models.DAL;

namespace SC1
{
  public partial class Default : System.Web.UI.Page
  {
    protected void Page_Load(Object sender, EventArgs e)
    {
      // I know I could do this but I don't want to unless I have too.
      //Category categoryObj = new Category();

      CategoryBLL myCategoryBLL = new CategoryBLL();

      Object myCategoryObj = myCategoryBLL.CategoryNew();

      // How do I make the code below work or what am I doing wrong.  
      myCategoryObj.Name = "test";

      string test = "";

    }
  }
}

CategoryBLL.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using SC1.Models.DAL;
using SC1.Models.OBJ;

namespace SC1.Models.BLL
{
  public class CategoryBLL
  {
    // Create a page object
    Category myCategoryObject = new Category();

    // Create a Data Acces Layer Object
    CategoryDAL myCategoryDAL = new CategoryDAL();


    public CategoryBLL()
    {
    }

    public DataSet Select()
    {
      return (myCategoryDAL.Select());
    }

    public Object CategoryNew()
    {
      return myCategoryObject;
    }



  }
}

CategoryDAL.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace SC1.Models.DAL
{
  public class CategoryDAL
  {
    public CategoryDAL()
    {
    }
    string connStr = ConfigurationManager.ConnectionStrings["staceys_cakesConnectionString"].ConnectionString;

    // select all
    public DataSet Select()
    {
      SqlConnection sqlConnection1 = new SqlConnection();
      string SqlString = "select * from Categories";
      SqlDataAdapter da = new SqlDataAdapter(SqlString, connStr);
      DataSet ds = new DataSet();
      da.Fill(ds, "Categories");
      return (ds);
    }
    // save
    // insert
    // update
    // delete

  }
}

Category.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace SC1.Models.OBJ
{
  public class Category
  {
    public int CategoryID { get; set; }
    public int ParentID { get; set; }
    public string Name { get; set; }
    public int DisplayOrder { get; set; }
    public bool Active { get; set; }

    public Category(){
    }

  }
}

【问题讨论】:

  • 不,这没有意义。您想将一个类传递给一个类,或者将一个对象传递给一个类,并且该对象位于下拉列表中。就我所知。。告诉我们正在发生什么,以及你想要发生什么而不是那样。
  • 我试图做的是让背后的代码调用 BLL,然后让它从 DAL 或对象中获取对象,然后当我设置属性时,我可以简单地拥有一个显示保存的函数(object _CategoryObject),它会看到一个 ID 或没有 ID,如果 ID 存在,它会插入一条新记录,如果 ID 已经存在,那么它将更新记录。另外我在想,既然对象是有属性的,那么我不应该在其他任何地方设置属性。
  • 我想我一定是错的......所以不用担心我正在努力纠正它。一个汽车类有属性,但业务逻辑层调用数据访问层保存不应该汽车属性是什么?还是我迷失在 OO World 中?
  • 在您的 DAL.Select 中,不要返回数据集,而是使用 for each 遍历每个数据行并将该行转换为 Category 的实例。然后将该 Category 对象添加到 List。全部转换后返回 List

标签: c# asp.net oop class


【解决方案1】:

改变

Object myCategoryObj = myCategoryBLL.CategoryNew()

Category myCategoryObj = myCategoryBLL.CategoryNew()

还有

公共对象 CategoryNew() { 返回我的类别对象; }

公共类别 CategoryNew() { 返回我的类别对象; }

【讨论】:

  • 谢谢,那是我出错的地方。实际上,另一位编码人员在工作时告诉我将属性移至 BLL。我知道这一定是错的。那么这是做 OO 的好方法还是我应该在其他地方阅读更多内容? @gbogumil?
  • 我会更改 DAL 选择以返回一个 IEnumerable 或一个 List 或编写另一个简单的类来表示一个类别对象列表。 DAL 将 BL 转换为 DL,将 DL 转换为 BL。 BL 不应该处理 DataSets/Tables/Rows。前期工作量更大,但最终代码更简洁。
  • @gbogumi 听起来不错。我还是 DotNet 的新手,所以我将研究 IEnumerable 或 List。如何更改以下代码行使其不在每个 DAL 中?字符串 connStr = ConfigurationManager.ConnectionStrings["staceys_cakesConnectionString"].ConnectionString;
  • "DAL 将 BL 转换为 DL,将 DL 转换为 BL。BL 不必处理 DataSets/Tables/Rows。"我应该在后面的代码中创建对象并将其传递给 BLL,如果返回没有错误,然后将其传递给 DAL?我以为你不应该从 Code Behind 连接到 DAL。 BL 对 DL 和 DL 对 BL 是什么意思?我正在寻找我可以在上面的简单示例代码中理解和使用的 IEnumerable 和或 List 示例。
  • 数据布局应该是唯一处理“数据”对象(如 DataTables、DataRows、Connections)的层。 BL(业务层)应该只调用来自 DL(数据层)的函数来创建/读取/更新/删除您的业务对象(Category 和 CategoryList)的实例。然后 DL 将处理底层数据库工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-25
  • 2011-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
  • 2013-03-16
相关资源
最近更新 更多