看了微软MVP朱晔出的ASP.NET第一步,大致了解了单值绑定的分类和用法。
表达式主要分为4种
- <%= XXX %> 内联引用方式本 可以引用C#代码
- <%# XXX %> 可以引用.CS代码中的字段 前提在初始化相应字段后,在Page_Load页面上使用Page.DataBind()
- <%#$ XXX %> 可以引用webConfig.xml中预定义的字段或者已注册的类的表达式
- <%#Eval(XXX) %> 类似于JAVASCRIPT方式 数据源也需要绑定,以下是DEMO
首先给出aspx代码:
Code
1<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="webTest._Default" %>
2
3<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4
5<html xmlns="http://www.w3.org/1999/xhtml" >
6<head runat="server">
7 <title>Untitled Page</title>
8</head>
9<body>
10 <form id="form1" runat="server">
11 <div>
12 <%# aaa + "1" %>
13 <br />
14 <%= DateTime.Now %>
15 </div>
16 <asp:TextBox ID="box_a" runat="server" Text="<%$ Code: DateTime.Now %>" />
17 <br />
18 <div>
19 </div>
20 <asp:TextBox ID="bindTest" runat="server" Text="<%$ AppSettings:test %>"/>
21 <br />
22 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
23 <Columns>
24 <asp:TemplateField>
25 <HeaderTemplate >
26 自定义的姓名列
27 </HeaderTemplate>
28 <ItemTemplate>
29 <asp:TextBox ID="txbName" runat="server" Text='<%#Eval("Name") %>'></asp:TextBox>
30 <br />
31 </ItemTemplate>
32 </asp:TemplateField>
33 <asp:TemplateField>
34 <HeaderTemplate >
35 <asp:Label ID="lblSex" runat="server" Text=" 自定义的性别列" ></asp:Label>
36 </HeaderTemplate>
37 <ItemTemplate>
38 <%#Eval("Sex") %>
39 </ItemTemplate>
40 </asp:TemplateField>
41 </Columns>
42 </asp:GridView>
43 </form>
44</body>
45</html>
46
1<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="webTest._Default" %>
2
3<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4
5<html xmlns="http://www.w3.org/1999/xhtml" >
6<head runat="server">
7 <title>Untitled Page</title>
8</head>
9<body>
10 <form id="form1" runat="server">
11 <div>
12 <%# aaa + "1" %>
13 <br />
14 <%= DateTime.Now %>
15 </div>
16 <asp:TextBox ID="box_a" runat="server" Text="<%$ Code: DateTime.Now %>" />
17 <br />
18 <div>
19 </div>
20 <asp:TextBox ID="bindTest" runat="server" Text="<%$ AppSettings:test %>"/>
21 <br />
22 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
23 <Columns>
24 <asp:TemplateField>
25 <HeaderTemplate >
26 自定义的姓名列
27 </HeaderTemplate>
28 <ItemTemplate>
29 <asp:TextBox ID="txbName" runat="server" Text='<%#Eval("Name") %>'></asp:TextBox>
30 <br />
31 </ItemTemplate>
32 </asp:TemplateField>
33 <asp:TemplateField>
34 <HeaderTemplate >
35 <asp:Label ID="lblSex" runat="server" Text=" 自定义的性别列" ></asp:Label>
36 </HeaderTemplate>
37 <ItemTemplate>
38 <%#Eval("Sex") %>
39 </ItemTemplate>
40 </asp:TemplateField>
41 </Columns>
42 </asp:GridView>
43 </form>
44</body>
45</html>
46
以下是.cs代码
Code
1using System;
2using System.Collections;
3using System.Configuration;
4using System.Data;
5using System.Linq;
6using System.Web;
7using System.Web.Security;
8using System.Web.UI;
9using System.Web.UI.HtmlControls;
10using System.Web.UI.WebControls;
11using System.Web.UI.WebControls.WebParts;
12using System.Xml.Linq;
13
14namespace webTest
15{
16 public partial class _Default : System.Web.UI.Page
17 {
18 //用于显示的字段
19 public string aaa = "后台的变量";
20 protected void Page_Load(object sender, EventArgs e)
21 {
22 ini_table();
23 Page.DataBind();
24 }
25
26 void ini_table()
27 {
28 DataTable dt = new DataTable();
29 //用于显示的Name列
30 dt.Columns.Add("Name");
31 dt.Columns.Add("sex");
32 DataRow dr = dt.NewRow();
33 dr[0] = "aaa";
34 dr[1] = "男";
35 dt.Rows.Add(dr);
36
37 dr = dt.NewRow();
38 dr[0] = "bbb";
39 dr[1] = "男";
40 dt.Rows.Add(dr);
41
42 dr = dt.NewRow();
43 dr[0] = "ccc";
44 dr[1] = "女";
45 dt.Rows.Add(dr);
46
47 //数据源绑定
48 this.GridView1.DataSource = dt.DefaultView;
49 this.GridView1.DataBind();
50 }
51 }
1using System;
2using System.Collections;
3using System.Configuration;
4using System.Data;
5using System.Linq;
6using System.Web;
7using System.Web.Security;
8using System.Web.UI;
9using System.Web.UI.HtmlControls;
10using System.Web.UI.WebControls;
11using System.Web.UI.WebControls.WebParts;
12using System.Xml.Linq;
13
14namespace webTest
15{
16 public partial class _Default : System.Web.UI.Page
17 {
18 //用于显示的字段
19 public string aaa = "后台的变量";
20 protected void Page_Load(object sender, EventArgs e)
21 {
22 ini_table();
23 Page.DataBind();
24 }
25
26 void ini_table()
27 {
28 DataTable dt = new DataTable();
29 //用于显示的Name列
30 dt.Columns.Add("Name");
31 dt.Columns.Add("sex");
32 DataRow dr = dt.NewRow();
33 dr[0] = "aaa";
34 dr[1] = "男";
35 dt.Rows.Add(dr);
36
37 dr = dt.NewRow();
38 dr[0] = "bbb";
39 dr[1] = "男";
40 dt.Rows.Add(dr);
41
42 dr = dt.NewRow();
43 dr[0] = "ccc";
44 dr[1] = "女";
45 dt.Rows.Add(dr);
46
47 //数据源绑定
48 this.GridView1.DataSource = dt.DefaultView;
49 this.GridView1.DataBind();
50 }
51 }
对web.config的添加:
appSettings中:
< appSettings >
< add key ="Test" value ="appSettingDemo" />
</ appSettings >
expressionBuilders中:
< expressionBuilders >
< add expressionPrefix ="Code" type ="webTest.codeExpressionBulider" />
</ expressionBuilders >
< appSettings >
< add key ="Test" value ="appSettingDemo" />
</ appSettings >
expressionBuilders中:
< expressionBuilders >
< add expressionPrefix ="Code" type ="webTest.codeExpressionBulider" />
</ expressionBuilders >
新建的codeExpressionBulider类
Code
1using System;
2using System.Data;
3using System.Configuration;
4using System.Linq;
5using System.Web;
6using System.Web.Security;
7using System.Web.UI;
8using System.Web.Compilation;
9using System.Web.UI.HtmlControls;
10using System.Web.UI.WebControls;
11using System.Web.UI.WebControls.WebParts;
12using System.Xml.Linq;
13using System.CodeDom;
14
15namespace webTest
16{
17 [ExpressionPrefix("Code")]
18 public class codeExpressionBulider: ExpressionBuilder
19 {
20 public override CodeExpression GetCodeExpression(
21 BoundPropertyEntry entry, object parsedData,
22 ExpressionBuilderContext context)
23 {
24 return new CodeSnippetExpression(entry.Expression);
25 }
26
27 }
28}
1using System;
2using System.Data;
3using System.Configuration;
4using System.Linq;
5using System.Web;
6using System.Web.Security;
7using System.Web.UI;
8using System.Web.Compilation;
9using System.Web.UI.HtmlControls;
10using System.Web.UI.WebControls;
11using System.Web.UI.WebControls.WebParts;
12using System.Xml.Linq;
13using System.CodeDom;
14
15namespace webTest
16{
17 [ExpressionPrefix("Code")]
18 public class codeExpressionBulider: ExpressionBuilder
19 {
20 public override CodeExpression GetCodeExpression(
21 BoundPropertyEntry entry, object parsedData,
22 ExpressionBuilderContext context)
23 {
24 return new CodeSnippetExpression(entry.Expression);
25 }
26
27 }
28}
以上代码在VS2008中通过。
虽然大概了解了下,但是还是不知道这4种方式主要运用的地方和优劣。。。有待在进一步学习中领悟