總述
綁定語法
第一種: <%= str%>
例子:'<%= DateTime.Now %>'
適用條件:用於非服務器端控件的屬性
第二種: <%= str%>
從出現的位置來看,除了能出現在第一種代碼塊出現的所有位置外,他還可以出現在服務器端控件的屬性中。
從綁定的變量類型上看,他還可以配合ASP.NET的數據綁定類控件,來綁定上述的第四種“變量”類型,就是數據集合(DropDownList,DataList,DataGrid,ListBox這些是數據綁定類控件,數據集合包括ArrayList(數組),Hashtable(哈稀表,DataView(數據視圖),DataReader等)。
從用法上看,在前台代碼中除了在相應位置寫上<%# %>外,在后台代碼中,還需要使用DataBind()方法
前台綁定位置
一般來說,在前台代碼的三種位置可能會用到(綁定)后台變量:
- 服務器端控件屬性或HTML標簽屬性
- JavaScript代碼中
- Html顯示內容的位置(也就是開始標簽與結束標簽之間的內容,如<div>這里</div>(Html標簽)或者<asp:Label ID="Label2" runat="server" Text="Label">這里</asp:Label>(服務器端控件),它作為占位符把變量顯示於符號出現的位置)
第一種控件和HTML標簽屬性綁定
屬性值綁定必須滿足屬性值約束:
屬性值不能是常量。比如服務器控件Runat必須是"server"
屬性值數據類型必須正確
第二種 javascript函數變量的綁定
一般只要綁定的后台變量和JavaScript中數據類型兼容即可
第三種 內容綁定
服務器控件內容的綁定
(1)約束型控件:這類控件要求它的開始標簽和結束標簽中只能包含指定的子控件,因此如果在這里出現代碼塊,將編譯錯誤。例如:
<asp:DataList runat="server"></asp:DataList>,在它之間,要求必須嵌套<ItemTemplate></ItemTemplate>。
(2)非嵌套類控件:這類控件,不允許在內部嵌套其他控件或標簽,只能是常量字符串,它會將開始標簽和結束標簽中常量字符串內容作為他的屬性。例如上面提到的TextBox,它會將標簽間內容作為它的Text屬性值。
(3)嵌套類控件:這類控件,可以嵌套其他任意控件,也可以包含字符串,因此可以正常顯示綁定代碼塊所表示的字符串內容。例如Label控件、Panel等。
(4)數據綁定類控件:這類控件是ASP.NET提供的服務器端控件,除了可以綁定普通的變量類型,也可以綁定一個數據集合(只能采取下面的第二種方式實現)。
后台可綁定變量
- 成員變量
- 方法或屬性的返回值
- 表達式,也就是所有后台能夠執行的代碼,運行后所得到的值(也就是直接將后台代碼寫在前台代碼中,記得使用完全限定名或在后台中using相關namespace)
- 數據集合
后台變量條件
(1)變量修飾符要求。變量是靜態或者實例字段均可。對於代碼隱藏模式的ASP.NET,以上的所述的變量必須為public或protected類型(因為是基類與派生類的關系),private或者internal都不行,而代碼嵌入模式則任何修飾符的變量均可訪問(一個類內部的關系)。
(2)變量類型要求。由於前台屬性一般是字符串類型,而JavaScript基本類型也就是字符串型、數字型、布爾型,因此對應的變量應該也是這幾種方式,其余類型如果不被支持(如復雜類型、數組、引用類型等),前台獲取的就是調用了變量的ToString()方法所得到的字符串。因此,在綁定時,要根據情況看是否能進行隱式類型轉換,必要時還要用相關函數來強制轉換,以保證前台可以獲得正確的值。當然,對於數據綁定類控件,它的有些屬性可以為數據集合,但這時的綁定只能通過下面第二種方式才被支持。
1.綁定樣式
前台綁定片段
<span style='<%#ConvertColor(Eval("PA_STATUS").ToString())%>'><%#Eval("PA_STATUS")%></span></div></td>
后台方法片段
protected string ConvertColor(string status) { int value = int.Parse(status); switch (value) { case 0: return "color:black"; case 1: return "color:green"; case 2: return "color:red"; default: return ""; } }
2.綁定后台定義的方法
前台綁定片段
<td><div><span ><%#ConvertStatus(Eval("PA_STATUS").ToString())%></span></div></td>
后台定義的方法
protected string ConvertStatus(string status) { int value = int.Parse(status); switch (value) { case 0: return "待處理"; case 1: return "處理成功"; case 2: return "處理失敗"; default: return ""; } }
如何綁定多個變量
<asp:LinkButton ID="lbtnID" runat="server" CausesValidation="False" CommandName="Status" CommandArgument='<%#Eval("ID")+","+Eval("Status")+","+Eval("TypeID")%>' Style="color: #0063dc;" ><span ><%#Eval("Status").ToString() == "0" ? "未審核" : "撤銷審核"%></span></asp:LinkButton>
資料來源:
http://www.cnblogs.com/lerit/archive/2010/10/22/1858007.html