2013-09-30 48 views
1

良好的一天,我想傳遞一個值到的onclick按鈕方法:如何將動態ASP按鈕事件處理程序的參數

這是我的動態創建的按鈕:

string Code = //Some value 
Button button = new Button(); 
button.ID = "Start"; 
button.Click +=new EventHandler(button_Click); 
button.CommandArgument = Code; 
Page.Controls.Add(button); 

這是我的事件方法:

void button_Click(object sender, EventArgs e) 
{ 
    string code = //Put the value in code 
} 

謝謝。

回答

4

一個廣泛使用的方法是將這些值保存在服務器可訪問的控件或變量中。

在具體詞:

如果你想通過從客戶端的動態值,使用ASP:HiddenField,設置服務器代碼中使用JavaScript和訪問它的值

<asp:HiddenField runat="server" id="hfMyArgument" value="" /> 

可以使用值在服務器端

void button_Click(object sender, EventArgs e) 
{ 
    string code = hfMyArgument.value.trim(); 
} 

創建並使用一個會話變量在創建按鈕

Session["MyArgument"] = "argument value"; 
Session["MySecondArgument"] = 143523; 

使用這些值在服務器端代碼C#

void button_Click(object sender, EventArgs e) 
{ 
    string code = Convert.toString(Session["MyArgument"]).trim(); 
} 
+0

感謝隱藏的字段放置工作。 – user2431114

+1

我的榮幸,並感謝標記我的答案有幫助。 如果您不需要從客戶端獲取參數並需要使用全局變量之類的參數,那麼會話是一種更好的方法,因爲您不需要更改用於添加隱藏字段的asp代碼。 – Tauseef

1

由於您使用的是按鈕屬性CommandArgument,因此您可以在此按鈕的事件OnCommand中訪問此屬性。 [但不是在的OnClick]

所以,定義事件處理程序OnCommand事件爲:

button.Command += new CommandEventHandler(button_Command); 

而在你的事件處理程序訪問CommandArgument爲:

void button_Command(object sender, CommandEventArgs e) 
{ 
    string _code = e.CommandArgument.ToString(); 
} 
+0

香港專業教育學院嘗試這樣做,但是當我按一下按鈕就張貼back.and頁面被刷新該事件不會觸發。 – user2431114

+1

確保每次回發時都創建控件。創建控件的代碼不應位於(!IsPostBack)條件中。回發將發生。你想避免它? –

相關問題