** 数据绑定语法 ** **
**
1. ASP.NET 声明性数据绑定语法使用 ```
1
22. 可以绑定到数据源、页或其他控件的属性、集合、表达式以及从方法调用返回的结果。
3
43. 语法示例
5
6** 简单属性 **
7
8|
9
10Customer: ```
11# custID
---|---
** 集合 **
|
Orders:
1<asp:listbox datasource="```
2# myArray
3```" id="List1" runat="server">
4
5** 表达式 **
6
7|
8
9Contact: ```
10# ( customer.First Name + " " + customer.LastName )
** 方法结果 **
|
Outstanding Balance: ```
GetBalance(custID)
1
24. ASP **Response.Write** ** 与 ** ** DataBind ** 方法区别
3
4ASP **Response.Write** 快捷方式语法在处理页时计算,而 ASP.NET 数据绑定语法仅在调用 ** DataBind ** 方法时计算。
5
65. ** DataBind ** 的级联
7
8当在父控件上调用 ** DataBind ** 时,它级联到该控件的所有子控件。
9
10例如, ` DataList1.DataBind() ` 将因此对 ** DataList ** 模板中的每一控件调用 ** DataBind ** 方法。在 **页** 上调用 ** DataBind ** — ` Page.DataBind() ` 或只是 ` DataBind() ` — 会导致计算页上的所有数据绑定表达式
11
12** 6. ** ** DataBinder.Eval
13
14**
15
16A .计算后期绑定的数据绑定表达式并且可选择将结果格式化为字符串。
17
18
19 B.```
20# DataBinder.Eval(Container.DataItem, "IntegerValue", "{0:c}")
** C ** ** . ** ** DataBinder.Eval ** 会对标准数据绑定语法带来很明显的性能损失,因为它使用后期绑定反射,注意这一点很重要。使用 ** DataBinder.Eval ** 时需谨慎,尤其是在不需要字符串格式化时。
** 7 ** ** . ** 数据绑定表达式必须计算为 ** String ** 类型的值
自定义控件类的代码
using System;
using System.Web;
using System.Web.UI;
namespace SimpleControlSamples {
public class Simple : Control {
protected override void Render(HtmlTextWriter output) {
output.Write("
欢迎使用控件开发!
");}
}
}
aspx页引用该自定义控件的代码
** ``` @ Register TagPrefix="SimpleControlSamples" Namespace="SimpleControlSamples" Assembly="SimpleControlSamples"
1
2< SimpleControlSamples:Simple id="MyControl" runat=server />
3
4属性类似具有访问器方法的 “ 聪明 ” 字段。应该从控件公开属性而不是公开公共字段,因为属性允许数据隐藏、可以版本化并受可视化设计器的支持。属性具有设置和检索属性的 get/set 访问器方法,并允许在需要时执行附加的程序逻辑。
5
6如果 A 类具有一个类型为 B 类的属性,则 B 的属性(如果有)称为 A 的子属性。下面的示例定义自定义控件 ` SimpleSubProperty ` ,该控件具有 ` Format ` 类型的属性。 ` Format ` 是具有两个基元属性的类 —— ` Color ` 和 ` Size ` ,这两个属性反过来成为 ` SimpleSubProperty ` 的子属性。
7
8注意 ASP.NET 具有设置子属性的特殊语法。下面的代码示例显示如何以声明方式设置 ` SimpleSubProperty ` 上的 ` Format.Color ` 和 ` Format.Size ` 子属性。 “-” 语法指示子属性。
9
10` <simplecontrolsamples:simplesubproperty format-color="red" format-size="3" message="Hello There" runat="server/">
11
12`
13
14每个控件都具有从 ** System.Web.UI.Control ** 继承的 ** Controls ** 属性 . 这是表示控件的子控件(如果有)的集合属性
15
16
17 如果控件未用 **ParseChildrenAttribute** 标记,或是标记为 **ParseChildrenAttribute(ChildrenAsProperties = false)** ,则当控件在页上以声明方式使用时,ASP.NET 页框架将应用以下分析逻辑。如果分析器在控件的标记内遇到嵌套控件,它将创建嵌套控件的实例并将它们添加到控件的 **Controls** 属性。标记之间的文本添加为 **LiteralControl** 。任何其他嵌套元素都生成分析器错误。
18
19 如:
20
21 <simplecontrolsamples:simpleinnercontent id="MyControl" runat="server">
22
23我的消息在控件标记内!!!!
24
25</simplecontrolsamples:simpleinnercontent>
26
27
28 以上正确
29
30
31 <simplecontrolsamples:simpleinnercontent id="MyControl" runat="server">
32<input runat="server" type="”text”"/> </simplecontrolsamples:simpleinnercontent>
33
34以上错误 ,因为 <input runat="server" type="”text”"/>是一个控件,标记之间只能添加文本,要添加控件,必须设置属性 ** ParseChildrenAttribute=true **
35
36在分析 ASP.NET 页时,样式信息被填充到 ** System.Web.UI.HtmlControls.HtmlControl ** 类上的 ** Style ** 属性( ** CssStyleCollection ** 类型)中。该属性本质上是一个词典,它将控件的样式公开为每个样式属性键值的字符串索引集合。例如,可以使用下面的代码在 ** HtmlInputText ** 服务器控件上设置并随后检索 ** width ** 样式属性。
37
38<script language="C#" runat="server">
39
40void Page_Load(Object sender, EventArgs E) {
41
42MyText.Style["width"] = "90px";
43
44Response.Write(MyText.Style["width"]);
45
46}
47
48</script>
49<input id="MyText" runat="server" type="text">
50<script language="VB" runat="server">
51
52Sub Page_Load(Sender As Object, E As EventArgs)
53
54MyText.Style("width") = "90px"
55
56Response.Write(MyText.Style("width"))
57
58End Sub
59
60</script>
61<input id="MyText" runat="server" type="text">
62<script language="JScript" runat="server"></script></input></input></simplecontrolsamples:simplesubproperty></asp:listbox>