雖然ASP.NET是網站型態會受限於程式需要PostBack的方式才能執行
但Web Form的控制項必然與他有一定的共通點...畢竟我們有很多案件的開發需求還是在Web上進行
所以我們就繼續的借用一些新的東西來用吧XD哈哈
Expression語法新增加的功能是ID與Type 的指定,以及Property對Method的繫結
(1)語法上加入逗號將繫結屬性名稱外可再選擇性的在加上ID或Type等於某控制項的方式,這樣以後此控制項Binding時就不會去以原本的ViewModel為對象而是用ID或型別去尋找出該條件的對象做繫結,而且這個尋找方式有向上延伸的功能,也就是往上控制項階層進行尋找
例如用在UserControl中也就可以因為設定了Panel的Type而讓UserControl因放置的Panel不同而有不同結果
(2)原本的繫結名稱可以用繫結對象Method的名子來做設定,只要繫結對象(ViewModel)有公用符合名稱並且有回傳值無參數的方法即可
(3)語法上可以使用Mode等於去設定繫結方式
Default:預設值,會自行判斷如果使用ViewModel則用雙向,若是指定控制項ID或Type則預設為單向
OneWay:單向,只會在目標屬性設定繫結對象的屬性值,不會改變繫結對象屬性值
TwoWay:雙向,目標屬性改變時也會同時更變繫結對象屬性
以下是程式示範
1.Default3.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %>
<%@ Register Src="UserControl.ascx" TagName="UserControl" TagPrefix="uc1" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Bind Control & Method</title> </head> <body> <form id="form1" runat="server"> <div> <uc1:UserControl ID="UserControl1" runat="server" /> <asp:Label ID="Label1" runat="server" Text='<%$ Binding : ID = UserControl1, GetText %>'></asp:Label> <asp:Panel ID="Panel1" runat="server" ToolTip="456"> <asp:Label ID="Label2" runat="server" Text='<%$ Binding : Type = Panel, ToolTip %>'></asp:Label> </asp:Panel> <asp:TextBox ID="TextBox1" runat="server" AutoPostBack="true" Text="789"></asp:TextBox> <asp:Label ID="Label3" runat="server" Text='<%$ Binding : ID = TextBox1, Mode = OneWay , Text %>'></asp:Label> <%-- Mode => Default, OneWay, TwoWay --%> </div> </form> </body> </html>
2.UserControl.ascx.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class UserControl : System.Web.UI.UserControl { protected void Page_Load(object sender, EventArgs e) { } public string GetText() { return "123"; } }
沒有留言:
張貼留言