Asp.net 通过代码隐藏或标记数据源填充gridview?

Asp.net 通过代码隐藏或标记数据源填充gridview?,asp.net,webforms,Asp.net,Webforms,这两个选项是:在aspx文件中使用参数或通过代码隐藏进行绑定。哪个更好?为什么?代码更少的原则。将尽可能多的内容放在aspx文件中。我建议使用ObjectDataSource,因为它可以提供更干净的体系结构,并且更容易处理事件,例如排序和分页。否则,您的控件必须专门处理此类事件,我发现这是一件令人头痛的事情。我总是创建一个业务层,并让Get()方法使用如下所示的签名。我对这种设计的模型来自这本书,我认为这是一个很棒的Web表单资源: 在应用程序代码/业务层中: public class Pro

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

代码更少的原则。将尽可能多的内容放在aspx文件中。

我建议使用ObjectDataSource,因为它可以提供更干净的体系结构,并且更容易处理事件,例如排序和分页。否则,您的控件必须专门处理此类事件,我发现这是一件令人头痛的事情。我总是创建一个业务层,并让Get()方法使用如下所示的签名。我对这种设计的模型来自这本书,我认为这是一个很棒的Web表单资源:

在应用程序代码/业务层中:

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"  />
公共类产品存储库
{
public List GetAll(/*此处参数为*/string sortOrder、string orderBy、int startRowIndex、int maximumRows)
{
//产品实体的调用数据访问层
}
public int GetAllCount(/*此处为参数*/)
{
//调用数据访问层以计数产品实体
}
}
在Web表单中:

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"  />


您是希望aspx了解太多底层内容,还是希望代码隐藏在UI上控制太多。。。你不能一视同仁地应用它,但我认为在UI中拖动东西通常比将它们拖到后面的代码中要好。我完全支持UI中的声明性抽象,但像Razor这样的东西确实让我感觉不对劲,因为逻辑在UI层中没有位置。也许我没有抓住重点,但我不认为数据绑定是对UI逻辑的争论。。。实际上,即使是代码背后也不是逻辑,而是从UI到数据和逻辑的转换。背后的代码只是在aspx无法完成数据绑定时使其工作的一种方法。您的逻辑应该隐藏在单独的层中,而不是隐藏在后面的代码中。这与代码更少是一致的,因为您可以以其他方式重用数据/逻辑层。我如何使用数据源而不是数据库来读取对象?我假设您指的是“ObjectDataSource”。当我在模拟一些东西,但还没有数据库时,我有时会这样做。您所做的只是在对象中硬编码列表。在上面的示例中,您将添加一个成员变量“private List allProducts=null;”。在构造函数(或工厂方法)中,您将使用产品填充“allProducts”,例如,“allProducts.Add(new Product{};”