快速业务通道

关于WebForms以及一些ASP.NET开发上的经验(2)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20
%# Eval("Title") %>" />
    </li>
   </ItemTemplate>
  <FooterTemplate>
    </ul>
   </FooterTemplate>
</asp:Repeater>

然后是Code Behind:

public partial class _Default : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
    this.rptArticles.DataSource = this.GetArticles();
    this.rptArticles.DataBind();
  }
  protected string GetImageUrl(object dataItem)
  {
    return "http://img.jeffz.net/" + (dataItem as Article).ImagePath;
  }
}

GetArticles方法的返回值可以是List<Article>或任何一个实现了 IEnumerable<Article>接口的类型,这个样在ItemTemplate中访问Container.DataItem就会得到这 个Article对象。我们在Code Behind类里定义一个protected方法,由于aspx最终会被编译为Code Behind 类的子类,因此我们就可以在ASPX页面中调用GetImageUrl方法。在方法内部我们可以将object类型的 DataItem转换成Article类型的对象,然后就可以做任意的处理了。

非常方便,非常灵活,还有什么可挑剔的呢?。

有。比如我们想要使用每行10个元素,最后一行如果不足就让右边空着的方式来展示,Repeater可能 就难以实现了(其实不能这么说,按标准应该还是使用无序列表,用样式来进行控制,Repeater完全够用 )。ASP.NET 1.1和2.0可能我们会使用DataList控件,只要把RepeaterColumns属性设为10即可。可惜 DataList生成的元素要么是<table />,要么是<span />和<br />,让人头疼。但是 在ASP.NET 3.5中又多了一个ListView控件,使用这个控件进行展示可以分组循环,可以指定容器,真可 谓无比强大。重要的是ListView和Repeater一样,所有的HTML都由自己控制,一个多余的字符都没有。

有了Repeater和ListView,真可谓打遍天下无敌手,任何页面的展示方式都不在话下。

我们再走个极端吧,我们来看下面的呈现方式:

<ul> <% foreach (Article article in this.GetArticles())
{ %>
<li>
<img src="<%= "http://img.jeffz.net/" + article.ImagePath %>" alt="<%= article.Title %>" />
</li>
<% } %>
</ul>

上面的例子在ASPX页面中使用了内联的foreach语句进行显示。这样生成代码无论从干净还是自定义 角度来说,都可以的让任何开发方式“无地自容”。但关键是,这个方式……为什么……恩,没错,说的 难听,这是原始的ASP的开发方式;说的好听,这是“先进”ASP.NET MVC框架中模板的写法。这是不是很 讽刺?但是这个的确是事实。Rick Strahl大牛也在他的Blog中写到:“我还记得在早些时候,那些 ASP.NET的疯狂追随者们是多么不屑使用内联的脚本标签,或者使用显式的URL而不是PostBack来进行开发 的做法,而其中的一些人现在又毫不犹豫地张开双臂去迎接MVC框架,这难道不讽刺吗?”而且由于 ASP.NET MVC的特性(从Controller传递到View的只是一个ViewData对象),因此真正ASP.NET MVC的“模 板”的写法还要多一次Cast,也就是类似于如下的写法(当然ASP.NET MVC可以使用强类型的ViewData, 这样就免去了这样强行的Cast):

<ul> <% foreach (Article article in (ViewData["Articles"] as List<Article>))
{ %>
<li>
<img src="<%= "http://img.jeffz.net/" + article.ImagePath % >"
alt="<%

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号