【.NET】分类文章列表

在Asp.net MVC中使用Repeater

1. Repeater需要手动去绑定数据。 意思是说我们要在View当中写 服务端代码,先从ViewData中取得数据,再去绑定到Repeater。
    2. 如果一个页面用到n+1个Repeater,那会不会疯掉? 而且要给每一个Repeater指定 Id,必去绑数据,头痛啊!!! 
    那么~~ 可不可以让Repeater用起来简单点呢? 来对Repeater进行一下改造,达到目的。
    在Mvc当中,使用 ViewData 来传递数据,那可不可以直接让Repeater 绑定 ViewData 中的数据呢? 当然可以
    看改造后的 Repeater 源码:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI.WebControls;
    using System.Web.Mvc;
    namespace RepeaterInMvc.Codes
    {
        public class MvcRepeater : Repeater
        {
            /// <summary>
            /// ViewData中的键名
            /// </summary>
            public string Key { get; set; }
            /// <summary>
            /// 得到ViewPage对象
            /// </summary>
            protected ViewPage ViewPage
            {
                get { return base.Page as ViewPage; }
            }
            /// <summary>
            /// 重写Onload事件 用于绑定数据
            /// </summary>
            /// <param name=”e”></param>
            protected override void OnLoad(EventArgs e)
            {
                this.DataSource = this.ViewPage.ViewData[this.Key]; //得到数据源
                this.DataBind();    //绑定 这样就不用手动写N个绑定了
                base.OnLoad(e);
           }
        }
    }
    上面的代码做了什么:
    1. 添加了一个公共属性 Key ,表示这个Repeater要绑定 ViewData 中哪一项数据。
    2. 添加了一个保护属性 ViewPage ,指向了当前的 Page 对象 并强制转换成 Mvc 的 ViewPage对象 (因为我们要得到ViewData或其它Mvc相关的上下文信息)
    3. 重写了 OnLoad 事件,重写这个事件,用来绑定数据,免得我们需要在View中手动绑定每一个Repeater,那多烦啊。
    现在我们的目的已经达到了。看看怎么使用吧:
    控制器代码:
            public ActionResult Index()
            {
                //来点测试数据
                List<Models.TestInfo> entities = new List<RepeaterInMvc.Models.TestInfo>();
                entities.Add(new RepeaterInMvc.Models.TestInfo { Id = 1, Name = ”Kagilo1″, Email = ”1@1.com” });
                entities.Add(new RepeaterInMvc.Models.TestInfo { Id = 2, Name = ”Kagilo2″, Email = ”1@1.com” });
                entities.Add(new RepeaterInMvc.Models.TestInfo { Id = 3, Name = ”Kagilo3″, Email = ”1@1.com” });
                entities.Add(new RepeaterInMvc.Models.TestInfo { Id = 4, Name = ”Kagilo4″, Email = ”1@1.com” });
                entities.Add(new RepeaterInMvc.Models.TestInfo { Id = 5, Name = ”Kagilo5″, Email = ”1@1.com” });
                ViewData["TestList"] = entities;
                return View();
            }
    再看看页面代码:
    <%@ Register Assembly=”RepeaterInMvc” Namespace=”RepeaterInMvc.Codes” TagPrefix=”mvc” %>
    <asp:Content ID=”indexTitle” ContentPlaceHolderID=”TitleContent” runat=”server”>
        Home Page
    </asp:Content>
    <asp:Content ID=”indexContent” ContentPlaceHolderID=”MainContent” runat=”server”>
        <h2>Repeater示例</h2>
        <p>
           <mvc:MvcRepeater Key=”TestList” runat=”server”>
                <ItemTemplate>
                    <div style=”height:30px; line-height:30px;”><%# Eval(“Id”) %>, <%# Eval(“Name”) %>, <%# Eval(“Email”) %></div>
                </ItemTemplate>
                <AlternatingItemTemplate>
                    <div style=”height:30px; line-height:30px; background:#eeeeee;”><%# Eval(“Id”) %>, <%# Eval(“Name”) %>, <%# Eval(“Email”) %></div>
                </AlternatingItemTemplate>
            </mvc:MvcRepeater>
        </p>
    </asp:Content>
    TPS :<%@ Register Assembly=”RepeaterInMvc” Namespace=”RepeaterInMvc.Codes” TagPrefix=”mvc” %>
    在当前页面注册控件!!!   当然,你也可以在 web.config 中的 page/controls 节点中为所有页面注册。

日期:2010年01月26日 | 分类:.NET

ASP.NET编程经验技巧10则

    4、使用StringBuilder类
    字符串在.NET框架中是不可变的,这意味着改变字符串的操作符和方法会返回字符串的改变后的拷贝,这意味着性能还有提高的空间。当进行大量的字符串操作时,使用StringBuilder类就是一种比较好的选择了。
    下面的C#代码测试用二种方式从10000个子字符串中生成字符串所需要的时间。第一次使用了一个简单的字符串串联操作;第二次使用了StringBuilder类。
    要想查看结果字符串,可以去掉下面的代码中注解行的注解符号:
以下为引用的内容: 
< %@ Page Language=”C#” %> 
< script runat=”server”>
void Page_Load(Object Source, EventArgs E)
{
int intLimit = 10000;
DateTime startTime;
DateTime endTime;
TimeSpan elapsedTime;
string strSub;
string strWhole = “”;
// 首先执行字符串连接操作
startTime = DateTime.Now;
for (int i=0; i < intLimit; i++)
{
strSub = i.ToString();
strWhole = strWhole + “ “ + strSub;
}
endTime = DateTime.Now;
elapsedTime = endTime – startTime;
lblConcat.Text = [...]

日期:2010年01月26日 | 分类:.NET

Delphi和.NET之父:Anders Hejlsberg

 Anders Hejlsberg,丹麦人,曾在丹麦科技大学学习工程学。

    Anders Hejlsberg第一次登上软件界历史舞台是在80年代早期,因为他为MS-DOS和CP/M设计了一个Pascal编译器。当时,还是一个小公司的Borland很快雇用了他,并买下了他的编译器,改称Turbo Pascal。在Borland,Hejlsberg继续开发Turbo Pascal,并最终带领他的小组设计了Turbo Pascal的替代品、开发工具史上的奇迹:Delphi语言。
  1996年,Anders Hejlsberg在Delphi3发布前离开Borland去了MS。
  在此之前,MS曾多次企图挖走Anders,但都没有成功。据信anders去MS(主要)不是钱的问题,虽然MS的开价也相当有吸引力: 130万美元年薪外加股票期权和分红,总计超过300万美元。更主要的原因是Anders和Delphi开发组的其他成员在修改编译器的问题上发生了争执;还有,据Borland内部人讲,Anders认为自己不再是“不可缺少的人”。
  Anders在Delphi3中几乎没有做什么工作,Chuck Jazdzewski扮演了一个更重要的角色。(–Anders Ohlsson) Anders在Borland时把所有精力都放在了Pascal产品上,也需要新的挑战,这时Bill Gates的亲自邀请,许诺给与挑战的机会,Anders加入了Microsoft就势在必行。
  Microsoft 用丰厚的薪水、股票认购权和巨额的加盟奖金雇请了 Hejlsberg 之后,Borland 曾提出通过不正当手段吸收新成员的控告。Borland 还曾声称 — 提供了很少的细节来支持指控 — Hejlsberg 正在开发“Delphi for Java”。这场诉讼虽然最终以 Borland 的胜利而收场;但Anders 已经在为Microsoft工作了。 

    2001年4月12日,Anders获得Dr. Dobb杂志2000年度编程杰出奖。Dr. Dobb’s Journal Excellence in Programming Award。
    1995年以来的获得DDJ EPA大奖的著名开发者列表 每年只评选1位。

日期:2010年01月26日 | 分类:.NET

赞助商链接

广而告之

友情链接

关于站点 - 联系我们 - 网站大事 - 友情链接 - 免责声明 - 意见反馈 - 网站投稿 - 站点地图
版权所有开心编程网禁止转载! Copyright © 2009-2010 All Rights Reserved. Email:hbhgfzk@126.com