WebForm頁面數據綁定總結


 總述

綁定語法

 

第一種: <%= str%>

例子:'<%= DateTime.Now %>'
適用條件:用於非服務器端控件的屬性

第二種: <%= str%>

從出現的位置來看,除了能出現在第一種代碼塊出現的所有位置外,他還可以出現在服務器端控件的屬性中。

從綁定的變量類型上看,他還可以配合ASP.NET的數據綁定類控件,來綁定上述的第四種“變量”類型,就是數據集合(DropDownList,DataList,DataGrid,ListBox這些是數據綁定類控件,數據集合包括ArrayList(數組),Hashtable(哈稀表,DataView(數據視圖),DataReader等)。

用法上看,在前台代碼中除了在相應位置寫上<%# %>外,在后台代碼中,還需要使用DataBind()方法

前台綁定位置

一般來說,在前台代碼的三種位置可能會用到(綁定)后台變量:

  1. 服務器端控件屬性或HTML標簽屬性
  2. JavaScript代碼中
  3. 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 




免責聲明!

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



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