【问题标题】:ASP.NET is based on declarative programming?ASP.NET 是基于声明式编程的吗?
【发布时间】:2010-09-24 20:53:39
【问题描述】:

最近我注意到 GridView 的分页机制中有一个微妙的限制。有效的分页,加载刚刚请求的数据页面,只有使用像 ObjectDataSource 这样的 DataSource 控件才能实现,这意味着声明性数据绑定,并且在不使用数据源并且仅来自代码隐藏时是不可能的(MSDN 描述它here)。

这是否意味着 ASP.NET 是基于声明式编程而不是代码隐藏?而且默认做声明式编程比较好?

【问题讨论】:

    标签: asp.net declarative-programming


    【解决方案1】:

    开箱即用的 WebForms 试图引导您走声明式的道路。您可以绕过这个问题并实际编写代码,但 WebForms 让这变得非常困难。

    如果您真的想拥有控制权,那么您应该研究 ASP.NET MVC 框架。

    【讨论】:

      【解决方案2】:

      ASP.Net 两者都使用:标记是声明性的,代码隐藏是命令性的。

      您应该倾向于一种导致更多声明性代码的样式 - 例如,构建用户控件。但是这些控件仍然需要命令式代码来告诉它们如何操作。

      【讨论】:

      • +1: 也许在用户控件中指定自定义控件?我知道你的意思,但严格地说(asp.net/msdn 术语)自定义控件是完全强制的,而用户控件可以更具声明性。
      【解决方案3】:

      我最终使用 SQL ROWNUMBER 函数进行了自己的分页。

      select * from
      ( select row_number() over (order by pk asc) as rownumber, * from ...)
      where row_number between @a and @b
      

      我最终完全没有使用声明式 - 而不是向数据源提供参数(这是可行的),我只是在代码隐藏中管理所有内容,手动设置数据源,手动构建寻呼机。

      我这样做的原因是什么? A bug in 3.5's querystringfield parameter handling.

      我本可以使用 row_number 处理对象数据源,但如果您不关心,您不必以声明方式执行任何操作。

      【讨论】:

      • 看来你必须在代码后面编写比声明性代码更长的代码。
      • 这就是为什么每个人都想要编写声明式程序。这一切都很好,直到您不能完全按照您指定的方式声明行为。 :)
      猜你喜欢
      • 2023-04-01
      • 2017-12-16
      • 2010-09-24
      • 2014-02-28
      • 1970-01-01
      • 2015-10-15
      • 2017-06-08
      • 2015-04-09
      • 1970-01-01
      相关资源
      最近更新 更多