Asp.net中的數據綁定


關鍵字:

  • Eval
  • Bind
  • 強類型數據綁定
  • 類似的其它選擇

在開發實踐中,數據綁定能夠最大限度的提高代碼產出和代碼質量。因此有必要整理一下數據綁定的方法及其相關注意事項。數據綁定分為單向和雙向,大家可能已經猜到,單項的數據綁定一般用於數據展示;而雙向的數據綁定除了展示數據,還要將界面數據的變動自動寫回到綁定的數據源中。

 

Eval

單向數據綁定,將數據源中的數據展現到界面上。當我們提及數據展現時,必然會考慮到數據的格式問題,例如日期格式。當然,這也是Eval關心的內容。

一般數據綁定

<%#Eval(“屬性名稱")%>

帶數據格式的數據綁定

<%#Eval(“屬性名稱","{0:格式字符串}")%>

帶格式字符串的數據綁定

<%#Eval(“屬性名稱","Home.aspx?id={0}")%>

例子代碼

home.aspx

<%@ Page Title="Home Page" Language="C#" AutoEventWireup="true" %>

<html>
<head>
    <title>Home Page</title>
    <script runat="server">
        protected void Page_Load(object
sender, EventArgs e)
        {
            formView.DataSource = new[]
            {
                new {
                    ID=3,
                    Name = "Baran",
                    BirthDay= DateTime.Parse("2012-6-18"),
                }
            };
            formView.DataBind();
        }
    </script>
    <style type="text/css">
        .left
        {
            float: left;
        }
        .clear
        {
            clear: both;
        }
    </style>
</head>
<body>
    <form runat="server" id="form1">
    <asp:FormView ID="formView" runat="server">
        <ItemTemplate>
            <div class="left">
                Name:</div>
            <div class="left">
                <asp:Label ID="_name" runat="server" Text='<%#Eval("Name") %>' /></div>
            <div class="clear" />
            <div class="left">
                BirthDay:</div>
            <div class="left">
                <asp:Label ID="_birthday" runat="server" Text='<%#Eval("BirthDay","{0:dd/MM/yyyy}") %>' /></div>
            <div class="clear" />
            <div class="left">
                Relative Link:
            </div>
            <div class="left">
                <asp:HyperLink ID="_relativeLink" runat="server" NavigateUrl='<%#Eval("ID","Membership.aspx?ID={0}") %>'
                    Text="Go" />
            </div>
        </ItemTemplate>
    </asp:FormView>
    </form>
</body>
</html>

顯示效果

image

Bind

一般數據綁定

<%#Bind(“屬性名稱")%>

帶格式的數據綁定

<%#Bind(“屬性名稱", "{0:數據格式}") %>

例子代碼

home.aspx

<%@ Page Title="Home Page" Language="C#" AutoEventWireup="true" %>

<html>
<head>
    <title>Home Page</title>
    <script runat="server">
        protected void Page_Load(object
sender, EventArgs e)
        {

        }
    </script>
    <style type="text/css">
        .left
        {
            float: left;
        }
        .clear
        {
            clear: both;
        }
    </style>
</head>
<body>
    <form runat="server" id="form1">
    <asp:FormView ID="formView" runat="server" DataSourceID="memberInfoDataSource" DefaultMode="Edit"
        Visible="true">
        <EditItemTemplate>
            <div class="left">
                Name:</div>
            <div class="left">
                <asp:TextBox ID="_name" runat="server" Text='<%#Bind("Name") %>' /></div>
            <div class="clear" />
            <div class="left">
                BirthDay:</div>
            <div class="left">
                <asp:TextBox ID="_birthday" runat="server" Text='<%#Bind("BirthDay","{0:dd/MM/yyyy}") %>' /></div>
            <div class="clear" />
            <asp:LinkButton ID="_update" runat="server" Text="Update" CommandName="Update" />
        </EditItemTemplate>
    </asp:FormView>
    <asp:ObjectDataSource ID="memberInfoDataSource" TypeName="MemberEntities.MemberInfo"
        SelectMethod="GetMembers" runat="server" />
    </form>
</body>
</html>

MemberInfo.cs

using System;
using System.Collections.Generic;

namespace MemberEntities
{
    public class MemberInfo
    {
        public string Name { get; set; }
        public int ID { get; set; }
        public DateTime
BirthDay { get; set; }

        public static IEnumerable<MemberInfo> GetMembers()
        {
            return new MemberInfo[] { 
                new MemberInfo{
                    ID=3,
                    Name = "Baran",
                    BirthDay= DateTime.Parse("2012-6-18"),}
            };
        }
    }
}

顯示效果

image

 

強類型數據綁定

眾所周知,Eval數據綁定應用的反射原理來返回數據,如果你對性能非常苛刻,但又不想丟掉綁定帶來的便利,那么我們還可以使用強類型轉換。

綁定的核心代碼為<%#((MemberEntities.MemberInfo)Container.DataItem).ID %>,將Container.DataItem先轉換成指定的類型,然后直接訪問其中的屬性。

例子代碼

<%@ Page Title="Home Page" Language="C#" AutoEventWireup="true" %>

<html>
<head>
    <title>Home Page</title>
</head>
<body>
    <form runat="server" id="form1">
    <asp:DetailsView ID="detailsView" runat="server" DataSourceID="memberInfoDataSource"
        AutoGenerateRows="false">
        <Fields>
            <asp:TemplateField HeaderText="ID">
                <ItemTemplate>
                    <asp:Literal ID="Literal1" Text='<%#((MemberEntities.MemberInfo)Container.DataItem).ID %>'
                        runat="server" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Name">
                <ItemTemplate>
                    <asp:Literal ID="Literal2" Text='<%#((MemberEntities.MemberInfo)Container.DataItem).Name %>'
                        runat="server" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="BirthDay">
                <ItemTemplate>
                    <asp:Literal ID="Literal1" Text='<%#((MemberEntities.MemberInfo)Container.DataItem).BirthDay.ToShortDateString() %>'
                        runat="server" />
                </ItemTemplate>
            </asp:TemplateField>
        </Fields>
    </asp:DetailsView>
    <asp:ObjectDataSource ID="memberInfoDataSource" TypeName="MemberEntities.MemberInfo"
        SelectMethod="GetMembers" runat="server" />
    </form>
</body>
</html>

類似的其它選擇

綁定的目的是為了將后台數據顯示在前台,但將后台數據顯示在前台,除了綁定還有其它的方式可供選擇。

  1. 直接使用asp.net控件,類似Literal,Label
  2. 使用asp.net <%Response.Write(頁面屬性)%>標記
  3. 使用JSON數據

例子代碼

<%@ Page Language="C#" AutoEventWireup="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.did">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
    <script runat="server" type="text/C#">
    
        protected DateTime Now
        {
            get
            {
                return DateTime.Now;
            }
        }

        [System.Web.Services.WebMethod]
        public static object GetEntity()
        {
            return new
            {
                Id = 1,
                Name = "JsonEntityName",
            };
        }
        
    </script>
    <script type="text/javascript">
    function showMsg(id) {
        alert(document.getElementById(id).innerHTML);
    }

    $(document).ready(function () {
        $("#assignValueButton").click(function () {
            $.ajax(
{
    type: "POST",
    dataType: "json",
    contentType: "application/json",
    url: "WebForm1.aspx/GetEntity",
    success: function (data) { 
    $("#entityId").text(data.d.Id);
    $("#entityName").text(data.d.Name);
    },
    error: function () { 
alert("error in get entity");
    },
});
        });
    });
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="_demoText" runat="server" Text="Demo Text" />
    </div>
    </form>
    <span>Id:</span><span id="entityId"></span><br />
    <span>name:</span><span id="entityName"></span><br />
    <span>now:
        <% Response.Write(Now);%></span>
    <input type="button" value="show msg" onclick="javascript:showMsg('<%=_demoText.ClientID %>')"
        id="showMsgButton" />
    <input type="button" value="assign value" id="assignValueButton" />
</body>
</html>

 

參考鏈接:

Eval:http://msdn.microsoft.com/en-us/library/4hx47hfe

Bind:http://msdn.microsoft.com/en-us/library/ms178366.aspx


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM