• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

自动绑定Asp.net页面实体数据的小技巧

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

    一般情况下,Asp.net页面,需要呈现后台的实体数据,比如展示一个人员的基本信息。

 

 

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="AutoDataBind.aspx.cs" Inherits="AutoDataBind" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form >
    <div id = "bindArea" runat="server">
    
        姓名:<asp:Label ID="_Name" runat="server" Text="Label"></asp:Label>
        <br />
        年龄:<asp:Label ID="_Age" runat="server" Text="Label"></asp:Label>
        <br />
        简介:<br />
        <asp:TextBox ID="_Memo" runat="server" Height="123px" TextMode="MultiLine" 
            Width="605px"></asp:TextBox>
    
    </div>
    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server">
    </asp:ObjectDataSource>
    </form>
</body>
</html>

 

    通常情况下,我们需要在后台写这样的代码:

    _Name.Text = Person.Name;

    才能把实体的值填充到界面上,实际上这是个枯燥的苦力活,尤其是做一些项目开始的时候,有大量的界面需要绑定数据,而且需求又变化快。

    那么我们希望自动绑定就比较好,比如象绑定表格一样, GridView = DataSource; GridView.DataBind();  实际上我们通过后台来调用反射,自动把属性绑定上就可以了。可能你已经注意到上面需要绑定的变量名都有个"_"前缀,这就是为了区别需要绑定的对象的命名规则。

 

    下面是后台绑定代码的例子:

 

using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Reflection;

public partial class AutoDataBind : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Person person = new Person();
        person.Name = "张三";
        person.Age = 99;
        person.Memo = "饭后百步走,活到99";
        DataBindHelper.Bind(bindArea, person);
    }
}

public class DataBindHelper
{

    public static void Bind(System.Web.UI.HtmlControls.HtmlGenericControl bindArea, object person)
    {
        Type type = person.GetType();
        foreach (PropertyInfo item in type.GetProperties())
        {
            Control control = bindArea.FindControl("_" + item.Name);
            if (control != null)
            {
                if (control.GetType() == typeof(Label)) ((Label)control).Text = item.GetValue(person, null).ToString();
                if (control.GetType() == typeof(TextBox)) ((TextBox)control).Text = item.GetValue(person, null).ToString();
            }
        }

    }
}

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Memo { get; set; }
}

 

例子比较简单,实际应用上可以扩展的更丰富一些,另外反射能降低性能,此方法可以适用在对性能要求不高,需求变化又快的小项目上。

 

欢迎转载,转载请注明出处及署名:月光下的凤尾族:http://www.cnblogs.com/demo/ 欢迎到此快速关注 谢谢 

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
[转]UltraWebGrid控件在开发ASP.NET项目中的使用方法和技巧发布时间:2022-07-10
下一篇:
ASP.NETCompareValidatorvalidateCurrency发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap