ASP.NET 內聯代碼、內聯表達式、數據綁定表達式使用方法羅列(形式就是常說的尖括號 百分號 等於號 井號)

今天在作渭南電腦維修網的一個小功能時遇到了一些問題,所以特別列出,以備他日之用。javascript

首先對ASP.NET 內聯代碼、內聯表達式、數據綁定表達式的概念進行羅列,詳細概念以及基本的用法我就不在這裏羅嗦了,請參照MSDN詳細介紹,如下是列表:html

一、<% inline code %>:內聯代碼java

二、<%=inline expression %>:內聯表達式express

三、<%# data-binding expression %>:數據綁定表達式服務器

內聯代碼我不多使用,因此也沒什麼心得能夠拿來與你們分享,內聯表達式、數據綁定表達式是我平常工做中必備之利器。spa

園子裏一篇文章寫的不錯,在這裏給你們推薦一下:《ASP.NET前臺代碼綁定後臺變量方法總結code

基本用例展現:server

//後臺代碼
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>

 正確寫法:htm

<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>
內聯表達式<%= %>和數據綁定表達式<%# %>的區別。
    一、在後臺代碼中, 數據綁定表達式內聯表達式惟一不一樣的,就是須要調用DataBind方法。只有執行了相應控件的DataBind方法,前臺代碼中這些控件中使用<%# %>的綁定纔會發生(而且控件內部的全部綁定也會發生,好比又嵌套了一個綁定後臺數據的控件),不然得話將不會被賦值,而是默認空值。上面咱們用的 是Page的DataBind方法,那麼整個頁面全部綁定都會執行。固然,若是咱們只執行DataList1或者DropDownList1的 DataBind方法,那麼只有相應控件的綁定纔會發生。須要注意的是,這裏說的須要執行DataBind包括了顯示和隱式執行,有些數據綁定類控件,當 它們經過 DataSourceID 屬性綁定到數據源控件時,會經過隱式調用 DataBind 方法來執行綁定。這時就沒必要顯示的再次調用了。

    二、兩種綁定方式上,他們的約束基本相同,都要求與屬性匹配,出如今他們能夠出現的位置。後者的使用位置更普遍,尤爲是支持服務器端控件和綁定數據集合。後臺代碼方面,後者須要調用DataBind才能完成綁定,前者則沒有這方面要求。這裏主要區別一下二者在執行機制上的區別:<%=...%>是 在程序執行時調用(應該是在頁面的RenderControl事件過程當中完成的,也就是一般狀況下咱們能夠看到的後臺代碼都執行完畢後再去到前臺代碼中進 行賦值綁定),而<%#... %>是在DataBind()方法以後被調用,一旦調用了DataBind(),則它對應的控件將綁定變量,所以,請注意:若是在 DataBind()後再修改變量,那麼綁定的就不是最新值了,這就須要在完成變量的賦值後,再去DataBind()。其實這兩種方式,它的運行過程可 以在VS中經過設置斷點來看看,看二者的綁定賦值分別是在何時發生的。blog

相關文章
相關標籤/搜索