2012-09-12 154 views
2

我有兩個按鈕與點擊功能C#/ asp.net全局變量?

第一個單擊時獲取分配變量。

如何讓我的第二個按鈕來從第一按鈕的變量,當我點擊按鈕2?

這似乎並沒有工作。由於第二個按鈕不能識別變量。

感謝

編輯:

只是爲了澄清我的代碼生成的PDF文件。按鈕1選擇要使用的模板的網址。並在按鈕2(生成PDF的那個)我想要它從按鈕1獲得變量集,以便它知道要使用的模板。

編輯2: 我的代碼的工作,但只有當我不使用AJAX更新面板。看來,我試圖設置變量不會與AJAX

設置
+1

你能和你已經嘗試什麼分享您的代碼? –

+0

沒有什麼可以分享的,想象兩個帶有點擊功能的準系統按鈕。第一個被分配一個字符串。我想第二個按鈕,能夠 –

+1

您需要了解「範圍」,以使用該字符串 - 這裏有一個鏈接:http://msdn.microsoft.com/en-us/library/ms973875.aspx –

回答

2

您的按鈕具有Id,你得到這個按鈕與他Id

諾塔:您可以依次添加RUNAT =「服務器」在服務器端可視化

<asp:Button id="Button1" 
      Text="Click " 
      OnClick="Btn1_Click" 
      runat="server"/> 

<asp:Button id="Button2" 
      Text="Click " 
      OnClick="Btn2_Click" 
      runat="server"/> 

void Btn2_Click(Object sender, EventArgs e) 
{ 
    Button1.Text = "test after click on button 2"; 

    Template = ...;//Set your value 
} 


void Btn1_Click(Object sender, EventArgs e) 
{ 
    Button2.Text = "test after click on button 1"; 

    //Here you can get your value after post. 
    var result = Template; 
} 

這不是主題,但在委託中,您也可以通過傳遞sender參數來獲取objet按鈕。

var button = sender as Button; //You get button who raise event 

爲了管理Template Path財產。

public string Template 
{ 
    get 
    { 
     if(ViewState["Template"] != null) 
     {  
     return (string)ViewState["Template"]; 
     } 
    } 

    set{ViewState["Template"] = value;} 
} 
+0

這是可行的,因爲'Button1.Text'和'Button2.Text'一個持久性機制 - 即'Button'控件使用ASP.NET ViewState的概念。這是你需要了解的堅持狀態。 – tomfanning

+0

默認情況下,TomFanning和EnableViewState =「true」,謝謝你的額外評論 –

+0

我關閉了視圖狀態!這可能是我的問題,因爲我在提問之前嘗試了這個問題。我會放棄這一點。 –

-1

我猜你正在尋找訪問用於該值在Button1的Click事件中設置按鈕2的單擊事件中一個變量的值?

private string myPrivateString = ""; 

void Page_Load()//Not sure of correct method signature 
{ 
    if(Page.IsPostBack) 
    { 
    myPrivateString = Session["myPrivateString"]; 
    } 
} 

void Button1_Click(object sender, EventArgs e) 
{ 
    //There will a postback before this gets executed 
    myPrivateString = "Value Set From Button 1"; 
    Session["myPrivateString"] = myPrivateString; 
} 

void Button2_Click(object sender, EventArgs e) 
{ 
    //There will a postback before this gets executed 
    //Accessing myPrivateString here without setting value from session 
    //will return empty string as after PostBack its a new page thats rendered. 
    myPrivateString = Session["myPrivateString"]; // Or do it in the Page_Load event 
} 

我想現在你可以得到button2 click事件裏面的值。
另請閱讀ASP.NET頁面生命週期以及ASP.NET框架如何處理按鈕點擊等客戶端事件。

+0

在這種情況下,你應該真正使用視圖狀態,而不是會話。 – Servy

+0

@Servy他沒有要求控制屬性,他想要在兩個不同的事件中訪問一個全局變量的值? ViewState僅適用於Text等控件屬性。爲什麼downvote?看看這些標籤。 –

+0

視圖狀態不僅僅用於控制屬性。控件屬性存儲在那裏,但其他一些東西也是如此,包括適當的用戶內容。這都是範圍問題。 ViewState的內容被限制在這個頁面,以及所有的回傳到這個頁面。它作爲隱藏的HTML字段與每個請求/響應來回傳遞。會話存儲在服務器的內存中,並且將遠遠超出此單頁生命週期的範圍。這很糟糕,這既是因爲浪費資源,也是因爲它意味着你永遠無法打開這個頁面兩次(無論如何都沒有錯誤)。 – Servy