標籤:style blog class code c java
今天在做渭南電腦維修網的一個小功能時遇到了一些問題,因此特別列出,以備他日之用。
首先對ASP.NET 內聯代碼、內聯運算式、資料繫結運算式的概念進行羅列,詳細概念以及基本的用法我就不在這裡羅嗦了,請參照MSDN詳細介紹,以下是列表:
1、<% inline code %>:內聯代碼
2、<%=inline expression %>:內聯運算式
3、<%# data-binding expression %>:資料繫結運算式
內聯代碼我很少使用,所以也沒什麼心得可以拿來與大家分享,內聯運算式、資料繫結運算式是我日常工作中必備之利器。
園子裡一篇文章寫的不錯,在這裡給大家推薦一下:《ASP.NET前台代碼綁定後台變數方法總結》
基本用例展示:
//後台代碼public string name;protected void Page_Load(object sender, EventArgs e){ Page.DataBind();//顯示綁定資料,資料繫結運算式獲值先天條件}//前台代碼 不管是內聯運算式還是資料繫結運算式都能擷取name的值<%= name %><%# name %>//通過資料繫結運算式獲值時別忘記在後台調用Page.DataBind() 否則<%# name %>擷取的值將為空白看看下邊的代碼你看出什麼問題了嗎?
<asp:Repeater ID="Repeater1" runat="server"> <ItemTemplate> <asp:HyperLink ID="linkID" runat="server" CssClass="<%#Eval("CSS") %>" NavigateUrl=‘javascript:MethodName(<%# Eval("ID") %>)‘>[關注]</asp:HyperLink> </ItemTemplate>
</asp:Repeater>
正確寫法:
<asp:Repeater ID="Repeater1" runat="server"> <ItemTemplate> //伺服器標記的格式不正確。 屬性使用雙引號調用資料繫結運算式報錯,改為單引號即可解決問題
<asp:HyperLink ID="linkID" runat="server" CssClass=‘<%#Eval("CSS") %>‘ NavigateUrl=‘<%# "javascript:MethodName("+Eval("ID")+");"%>‘>[關注]</asp:HyperLink> //對於NavigateUrl屬性對執行的javascript方法進行動態參數賦值時,前邊錯誤的寫法根本擷取不到其實際的值,實際輸出居然是"javascript:MethodName(<%# Eval("ID") %>)"與我們要的結果截然不同,通過《ASP.NET HyperLink Eval in a Javascript function》學到了老外的精髓,使用變相思維,我們直接通過資料繫結運算式進行字串的拼接,這樣就得到了我們預期的效果。
</ItemTemplate>
</asp:Repeater>
內聯運算式<%= %>和資料繫結運算式<%# %>的區別。 1、在後台代碼中,資料繫結運算式與內聯運算式唯一不同的,就是需要調用DataBind方法。只有執行了相應控制項的DataBind方法,前台代碼中這些控制項中使用<%# %>的綁定才會發生(並且控制項內部的所有綁定也會發生,比如又嵌套了一個綁定後台資料的控制項),否則得話將不會被賦值,而是預設空值。上面我們用的 是Page的DataBind方法,那麼整個頁面所有綁定都會執行。當然,如果我們只執行DataList1或者DropDownList1的 DataBind方法,那麼只有相應控制項的綁定才會發生。需要注意的是,這裡說的需要執行DataBind包括了顯示和隱式執行,有些資料繫結類控制項,當 它們通過 DataSourceID 屬性綁定到資料來源控制項時,會通過隱式調用 DataBind 方法來執行綁定。這時就不必顯示的再次調用了。
2、兩種綁定方式上,他們的約束基本相同,都要求與屬性匹配,出現在他們可以出現的位置。後者的使用位置更廣泛,尤其是支援伺服器端控制項和綁定資料集合。後台代碼方面,後者需要調用DataBind才能完成綁定,前者則沒有這方面要求。這裡主要區別一下兩者在執行機制上的區別:<%=...%>是 在程式執行時調用(應該是在頁面的RenderControl事件程序中完成的,也就是通常情況下我們可以看到的後台代碼都執行完畢後再去到前台代碼中進 行賦值綁定),而<%#... %>是在DataBind()方法之後被調用,一旦調用了DataBind(),則它對應的控制項將綁定變數,因此,請注意:如果在 DataBind()後再修改變數,那麼綁定的就不是最新值了,這就需要在完成變數的賦值後,再去DataBind()。其實這兩種方式,它的運行過程可 以在VS中通過設定斷點來看看,看兩者的綁定賦值分別是在什麼時候發生的。