【问题标题】:populate gridview via code-behind or markup DataSource?通过代码隐藏或标记数据源填充gridview?
【发布时间】:2011-06-29 20:28:49
【问题描述】:

这 2 个选项是:在 aspx 文件中使用参数或通过代码隐藏进行绑定。哪个更好,为什么?

【问题讨论】:

    标签: asp.net webforms


    【解决方案1】:

    我推荐使用 ObjectDataSource,因为它可以带来更简洁的架构,并且更容易处理事件,例如排序和分页。否则,您的控件必须专门处理此类事件,我觉得这是一件令人头疼的事情。我总是创建一个业务层并让我的 Get() 方法使用如下所示的签名。我的这种设计模型来自这本书,我认为这是一个很棒的Web Forms资源:

    http://www.amazon.com/ASP-NET-2-0-Website-Programming-Programmer/dp/0764584642

    在 app_code/业务层:

    public class ProductRepository
    {
      public List<Product> GetAll(/* params here */ string sortOrder, string orderBy, int startRowIndex, int maximumRows)
      {
          // call data access tier for Product entities
      }
    
      public int GetAllCount(/* params here */ )
      {
          // call data access tier for count of Product entities
      }
    }
    

    在网络表单中:

    <asp:ObjectDataSource ID="objProduct" runat="server"
      TypeName="MyNameSpace.BLL.ProductRepository"
      SelectMethod="GetAll"
      EnablePaging="true" 
      SortParameterName="sortOrder"
      SelectCountMethod="GetAllCount"  />
    

    【讨论】:

    • 如何使用数据源从对象而不是数据库中读取数据?
    • 我假设您的意思是“ObjectDataSource”。当我在模拟事情并且还没有数据库时,我有时会这样做。您所做的就是对对象中的列表进行硬编码。在上面的示例中,您将添加一个成员变量“private List allProducts = null;”。在构造函数(或工厂方法)中,您将使用产品填充“allProducts”。例如,“allProducts.Add(new Product{});”
    【解决方案2】:

    少代码原则。尽量放在aspx文件中。

    【讨论】:

    • 您是否宁愿 aspx 知道太多的东西,或者背后的代码在 UI 上控制太多...您不能一视同仁地应用它,但我认为在UI 通常比将它们拖到代码隐藏中更好。
    • 我完全赞成 UI 中的声明性抽象,但是像 Razor 这样的东西真的让我很不爽,因为逻辑在 UI 层中没有位置。
    • 也许是我没抓住重点,但我不认为数据绑定会用逻辑污染 UI...实际上,即使是背后的代码也不是逻辑,而只是从 UI 到数据和逻辑的转换。后面的代码只是在aspx无法做到时使数据绑定工作的一种方式。您的逻辑应该隐藏在单独的层中,而不是隐藏在后面的代码中。这完全符合减少代码的要求,因为您可以通过其他方式重用数据/逻辑层。
    猜你喜欢
    • 2014-09-09
    • 2020-06-29
    • 2013-09-07
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 2011-04-18
    • 2011-01-08
    相关资源
    最近更新 更多