今天在作渭南電腦維修網的一個小功能時遇到了一些問題,所以特別列出,以備他日之用。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才能完成綁定,前者則沒有這方面要求。這裏主要區別一下二者在執行機制上的區別:<%=...%>是 在程序執行時調用(應該是在頁面的RenderControl事件過程當中完成的,也就是一般狀況下咱們能夠看到的後臺代碼都執行完畢後再去到前臺代碼中進 行賦值綁定),而<%#... %>是在DataBind()方法以後被調用,一旦調用了DataBind(),則它對應的控件將綁定變量,所以,請注意:若是在 DataBind()後再修改變量,那麼綁定的就不是最新值了,這就須要在完成變量的賦值後,再去DataBind()。其實這兩種方式,它的運行過程可 以在VS中經過設置斷點來看看,看二者的綁定賦值分別是在何時發生的。blog