星期二, 4月 29, 2008

usercontrol互相傳值

話說兩個不相信任的政黨..要互相移交政權..要好好的傳地下去..是有點給它難..
話說兩個不相關的usercontrol要互相丟值接值..感覺起來也是不怎麼好用..
(這開場白好像有點鳥..HotHotHotHotHotHotHotHotHotHotHotHotHotHotHotHot..)

google一下..可以發現有人提供一些方法..像interface這樣很正統的解決方法..不過..
真的有點給它努力認真研究..才可以給它懂(我就是這樣懂的..On the phone..)
如果看不懂或是想偷懶..那有啥方法呢?..有低..session..application都可以解決..
那我寫這篇文章幹麼..Nerd..當然還有其他方法啦..不過..也算小撇步..
跟session..application的想法是一樣的..

直接看圖說故事ㄅ..

textbox.ascx..這一個usercontrol放一個textbox和一個button

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="textbox.ascx.cs" Inherits="usercontrol_textbox" %>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />

textbox.ascx.cs

protected void Page_Load(object sender, EventArgs e)
{

}
protected void Button1_Click(object sender, EventArgs e)
{
HttpContext.Current.Items["textbox"] = TextBox1.Text;
}

label.ascx..這一個usercontrol放一個label

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="label.ascx.cs" Inherits="usercontrol_label" %>
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>

label.ascx.cs

protected void Page_Load(object sender, EventArgs e)
{

}
void Page_PreRender(object sender, EventArgs e)
{
Label1.Text = (string)HttpContext.Current.Items["textbox"];
}

CurrentItems.aspx..這裡把兩個usercontrol放進來..

<body>
<form id="form1" runat="server">
<div>
<uc1:textbox ID="textbox1" runat="server" />
<br />
<uc2:label ID="label1" runat="server" />
</div>
</form>
</body>

執行就可以抓到值啦..Clown..感覺一整個懶..XD..
這裡就是用HttpContext.Current.Items["abc"]這東西..

msdn說..

取得索引鍵/數值集合,其可用以在 HTTP 要求期間,於 IHttpModule 介面和 IHttpHandler 介面之間組織並共用資料。


所以非常適合短暫的存取資料..usercotrol傳遞資料..Happy

參考:
http://msdn2.microsoft.com/zh-tw/library/system.web.httpcontext.items.aspx

沒有留言: