|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
有时也搞不懂应该学那种;主要看你以后去的那个公司是使用哪种了。就像王千祥的课上说的:企业应用现在主要就三层(其实也差不多就是MVC):表示层(主要使用html写的,很简单)、业务逻辑层(主要就是应用服务器的)。最后就是数据层(其实就是学习数据库)asp.net|初级|数据|语法 在后面的"模板中的数据绑定"部分中我们叙述过,ASP.NET包括了一种宣布式的数据绑定语法,用于在数据绑定模板中把数据源字段与控件的属性相干联。你也能够在代码中利用<%#...>语法来举行恣意值的数据绑定,比方页面和控件属性、汇合、表达式,乃至于办法挪用的前往了局。为了强迫盘算数据绑定的值,你必需在包括数据绑定语法的页面或控件上挪用DataBind办法。上面的表格显现了ASP.NET中的数据绑定语法的一些例子。
单个属性Customer:<%#custID%>汇合Orders<asp:ListBoxid="List1"datasource=<%#myArray%>runat="server">表达式Contact<%#(customer.FirstName+""+customer.LastName)%>办法的前往值OutstandingBalance:<%#GetBalance(custID)%>
只管下面的语法与ASP的Response.Write便利语法(<%=%>)看起来相似,可是它们的举动却毅然分歧。ASPResponse.Write便利语法在页面处置的时分盘算值,而ASP.NET数据绑定语法只在DataBind办法被挪用的时分才盘算值。
DataBind是页面和一切务器控件的一个办法。当你挪用父控件的DataBind的时分,它会顺次挪用一切子控件的DataBind办法。比方,DataList1.DataBind()就会挪用DataList模板中的一切控件的DataBind办法。挪用页面的DataBind办法--Page.DataBind()或复杂地挪用DataBind()--会激发页面上一切的数据绑定表达式的盘算操纵。一般只在页面的Page_Load事务中挪用DataBind办法,以下面的例子所示。
在.aspx页面的任何宣布式片段中,你都可使用绑定语法,并为它的估值指定运转时所希冀的数据范例。下面例子中的复杂属性、表达式和办法在被盘算的时分会向用户显现文本内容。在这类情形下,数据绑定表达式的值是String范例的。在下面的汇合例子中,数据绑定语法的值的范例是ListBox的DataSource属性。你会发明在绑定表达式中强迫转换值的范例关于天生希冀的了局是需要的。比方,假如count是一个整数:
NumberofRecords:<%#count.ToString()%>
ASP.NET数据绑定语法撑持大众变量、页面的属性和页面中别的控件的属性的绑定。上面的例子演示了怎样绑定到大众变量和页面的复杂属性。请注重,在DataBind()被挪用之前,这些值都已初始化过了。
<scriptlanguage="VB"runat="server">
SubPage_Load(senderAsObject,eAsEventArgs)
Page.DataBind
EndSub
ReadOnlyPropertycustID()AsString
Get
Return"ALFKI"
EndGet
EndProperty
ReadOnlyPropertyorderCount()AsInteger
Get
Return11
EndGet
EndProperty
</script>
<formaction="DataBind1_vb.aspx"runat="server">
Customer:<b><%#custID%></b><br/>
OpenOrders:<b><%#orderCount%></b>
</form>
上面的例子演示怎样绑定到另外一个控件的属性:
<asp:DropDownListid="StateList"runat="server">
<asp:ListItem>CA</asp:ListItem>
……
</asp:DropDownList>
<asp:buttonID="Button1"Text="Submit"runat="server"/>
SelectedState:<asp:labelID="Label1"text=<%#StateList.SelectedItem.Text%>runat="server"/><P> 列表范例的服务器控件(比方DropDownList、ListBox和HTMLSelect)把汇合作为数据源。上面的例子演示怎样绑定到通用言语运转时汇合范例。这些控件只能绑定到撑持Ienumerable、Icollection或IlistSource接口的汇合。更加罕见的是,它能够绑定到ArrayList、Hashtable、DataView和DataReader。上面的例子演示了怎样绑定到ArrayList。
SubPage_Load(senderAsObject,eAsEventArgs)
IfNotIsPostBackThen
DimvaluesasArrayList=newArrayList()
values.Add("IN")
values.Add("KS")
values.Add("MD")
values.Add("MI")
values.Add("OR")
values.Add("TN")
DropDown1.DataSource=values
DropDown1.DataBind
EndIf
EndSub
上面的例子演示了怎样绑定到DataView。请注重DataView类是在System.Data名字空间中界说的。
SubPage_Load(senderAsObject,eAsEventArgs)
IfNotIsPostBackThen
DimdtAsDataTable
DimdrAsDataRow
DimiAsInteger
创建DataTable
dt=NewDataTable
dt.Columns.Add(NewDataColumn("IntegerValue",GetType(Integer)))
dt.Columns.Add(NewDataColumn("StringValue",GetType(String)))
dt.Columns.Add(NewDataColumn("DateTimeValue",GetType(DateTime)))
dt.Columns.Add(NewDataColumn("BooleanValue",GetType(Boolean)))
添补一些数据
Fori=1To9
dr=dt.NewRow()
dr(0)=i
dr(1)="Item"+i.ToString()
dr(2)=DateTime.Now.ToShortTimeString
If(iMod2<>0)Then
dr(3)=True
Else
dr(3)=False
EndIf
把数据行增加到表
dt.Rows.Add(dr)
Next
GridView1.DataSource=NewDataView(dt)
GridView1.DataBind()
EndIf
EndSub
上面的例子演示了怎样绑定到Hashtable。
SubPage_Load(senderAsObject,eAsEventArgs)
IfNotIsPostBackThen
DimhAsHashtable=newHashtable()
h.Add("key1","value1")
h.Add("key2","value2")
h.Add("key3","value3")
MyDataList.DataSource=h
MyDataList.DataBind
EndIf
EndSub
一般情形下,你大概但愿绑定到页面或控件之前先处置数据。上面的例子演示了怎样绑定到表达式和办法的前往值。
SubPage_Load(senderAsObject,eAsEventArgs)
IfNotIsPostBackThen
DimvaluesasArrayList=newArrayList()
values.Add(0)
values.Add(1)
values.Add(2)
values.Add(3)
values.Add(4)
values.Add(5)
values.Add(6)
DataList1.DataSource=values
DataList1.DataBind
EndIf
EndSub
FunctionEvenOrOdd(numberAsInteger)AsString
If(numberMod2<>0)Then
Return"Odd"
Else
Return"Even"
EndIf
EndFunction
<asp:DataListid="DataList1"……>
<ItemTemplate>
NumberValue:<%#Container.DataItem%>
Even/Odd:<%#EvenOrOdd(Container.DataItem)%>
</ItemTemplate>
</asp:DataList>
<P> ASP.NET页面框架组件供应了一个静态的办法,它预算提早绑定(late-bound)的数据绑定表达式并能够选择把其了局格局化为字符串。在这类情形下,DataBinder.Eval很便利,由于它打消了开辟者把估值转会为希冀的数据范例所必需实行的良多显式转化事情。当模板化列表中无数据绑定控件的时分,它出格有效处,由于在那种情形下,一般数据行和数据字段都必需转换。
看看上面的例子,它必要把整数显现为泉币字符串。在尺度的ASP.NET数据绑定语法中,你必需起首转换数据行的范例以检索数据字段IntegerValue。接着把它作为参数传送给String.Format办法。
<%#String.Format("{0:c}",(CType(Container.DataItem,DataRowView)("IntegerValue")))%>
这个语法很庞大而且不简单记着。与此构成对比的是,DataBinder.Eval是一个复杂的办法,它只要三个参数:数据项的定名容器(namingcontainer)、数据字段称号和格局化字符串。在模板化的控件(比方FormView、GridView、DetailsView、DataList或Repeater)中,定名容器都是Container.DataItem。页面(Page)是另外一种定名容器,也能够用于DataBinder.Eval。后面我们提到,ASP.NET2.0为DataBinder.Eval供应了一个新的简化的语法(Eval),你能够在数据绑定的控件模板中利用它来主动剖析Container.DataItem。
<%#DataBinder.Eval(Container.DataItem,"IntegerValue","{0:c}")%>
<%#Eval("IntegerValue","{0:c}")%>
格局化字符串参数是可选的。假如省略了这个参数,DataBinder.Eval会前往Object范例值,以下所示:
<%#CType(DataBinder.Eval(Container.DataItem,"BoolValue"),Boolean)%>
我们要重点注重的是,与尺度的数据绑定语法比拟,DataBinder.Eval会分明地影响功能,这是由于它利用了提早绑定的反射(reflection)。请明智地利用DataBinder.Eval,出格是在不必要格局化字符串的情形下。因为二次编译器太复杂,那么建议只是在安装程序的时候编译一次,而不类似java那样运行就编译。并且我觉得,一次痛苦,总比多次低效率要舒服多了。 |
|