快速业务通道

ASP.NET 2.0数据源控件的参数

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
|| (parameterState != null)) {
    return new Pair(baseState, parameterState);
   }
   return null;
  }
  protected override void TrackViewState() {
   base.TrackViewState();
   if (_parameters != null) {
    ((IStateManager)_parameters).TrackViewState();
   }
  }
}

Microsoft ASP.NET 提供了 ParameterCollection,您可以完全按原样使用 该集合。它同时包含更改跟踪和状态管理功能。您只需相应地调用该集合的 API 来合并这些功能,另外还可以在控件外将该集合揭示为属性。在上述代码中,需 要注意的关键点为:

·该数据源控件揭示了一个 ParameterCollection 类型的属性,以使开发人 员能够添加表示要使用的邮政编码值的参数。如果已经设置了参数,则使用该参 数;否则,将使用 ZipCode 属性值。

·该控件替代了与状态管理相关的方法,以请求 ParameterCollection 中内 置的状态管理功能。

·该控件使用页面生命周期的新 LoadComplete 事件来更新参数值,它通过 替代 OnInit 来注册这些值。如果在初始化、回发处理或页面编码(当引发 LoadComplete 时,全部都会发生)期间更改了任何参数的值,则该数据源控件 还会注册 ParameterCollection 所引发的 ParametersChanged 事件。与上述情 况一样,如果设置了 ZipCode 属性,将会引发更改通知,向数据绑定控件指明 它需要再次执行数据绑定操作(随后在 PreRender 期间将会发生此情况)。

·需要参与生命周期是数据源作为控件(即使是非可视控件)来实现的一个 原因。另一个原因是为了使数据绑定控件能够通过使用其 DataSourceID 属性来 使用 FindControl,并能够获得基于 INamingContainer 的分层名称领域的益处 (这样就能够实现嵌套数据方案,方法是在模板内放置一个数据源控件,并使其 在每行中重复一次)。数据源是控件这一事实早已是争论的焦点 - 但愿这能够 说明此问题的一些论据。

在此 DataSourceView 只需调用 GetSelectedZipCode,而不是直接使用 ZipCode 属性。此外,还更改了数据源视图代码,以便在未选中 ZipCode 的情 况下返回 null(而不是抛出异常),这会导致数据绑定控件显示“空”视图。 这在通常情况下是一个惯例,但是回顾来看,这应该成为数据源控件语义的一个 不可获缺的方面。

private sealed class WeatherDataSourceView : DataSourceView {
  ...
  internal Weather GetWeather() {
   string zipCode = _owner.GetSelectedZipCode();
   if (zipCode.Length == 0) {
    return null;
   }
   WeatherService weatherService = new WeatherService(zipCode);
   return weatherService.GetWeather();
  }
}

完整的代码就是这个样子。以下是经过更新的用法示例,该示例现在是声明 性的。

Zip Code: <asp:TextBox runat="server" id="zipCodeTextBox" />
<asp:Button runat="server" Text="查找" />
<hr />
<asp:FormView runat="server" DataSourceID="weatherDS">
<ItemTemplate>
<asp:Label runat="server"
Text=''<%# Eval("Temperature",
"当前温度是 {0}。") %>'' />
</ItemTemplate>
</asp:FormView>
<nk:WeatherDataSource runat="server" id="weatherDS">
<Parameters>
<asp:ControlParameter Name="ZipCode" ControlID="zipCodeTextBox" />
</Parameters>
</nk:WeatherDataSource>

请注意,在标记中并未指定 Te

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号