2013-01-11 103 views
2

我動態創建一個表格,每行會包含一個按鈕,這個按鈕將調用一個函數,每個按鈕將處理不同的參數,例如,HTML表格上的按鈕設置的OnClick動態

string Parameter1 = "MyValue"; 
    string Parameter2 = "MyOthervalue"; 

    HtmlInputButton input = new HtmlInputButton(); 
    input.ID = "Button1"; 
    input.Value = "button"; 
    input.Attributes.Add("onclick", "MyFunction(" + Parameter1 + "," + Parameter2 + ");"); 

    td = new HtmlTableCell(); 
    td.Align = "center"; 
    td.Controls.Add(input); 
    tr.Cells.Add(td); 

當用戶單擊按鈕時,我需要運行MyFunction,然後刷新頁面以查看更改。

我知道也許我可以打開第二個頁面並在URL中發送參數,但是我想在同一頁面中使用代碼,然後重新加載頁面。

什麼是最好的方法。

謝謝,

編輯。

我能解決這個問題的方式如下:

input = new Button(); 
    input.Text = "Click Me"; 
    input.CommandArgument = "3|Parameter3"; 
    input.Command += new CommandEventHandler(Button_Handler); 

    td = new HtmlTableCell(); 
    td.Align = "center"; 
    td.Controls.Add(input); 

    tr.Cells.Add(td); 
    tbTable.Rows.Add(tr); 



public void Button_Handler(object sender, CommandEventArgs e) 
{ 
    Button mybutton = (Button)sender; 
    string[] Parameters = e.CommandArgument.ToString().Split('|'); 
    mybutton.Text = Parameters[0] + "-" + Parameters[1]; 
    //Call MyFunction(Parameters[0], Parameters[1]); 

} 
+0

你想在客戶端的MyFunction中回發? – phnkha

回答

1

我有一個絕招,你可以使用一個隱藏按鈕,隱藏字段:

HTML:

<script type="text/javascript"> 
    function MyFunction() { 
     // do something 
     document.getElementById("<%= hid.ClientID %>").value = "some value"; 

     // trigger hidden button click 
     document.getElementById("<%= hiddenButton.ClientID %>").click(); 
    } 
</script> 

<asp:HiddenField ID="hid" runat="server" /> 
<asp:Button ID="hiddenButton" runat="server" OnClick="hiddenButton_Click" style="display:none" /> 

代碼背後:

protected void hiddenButton_Click(object sender, EventArgs e) 
{ 
    // your business goes here 
    string value = hid.Value; 
} 
+0

請注意,MyFunction實現上的「某些值」應該是一個參數,因爲頁面將處理多個記錄(可能是數百個),並且表中的每一行都將包含一個按鈕,所以我的想法是MyFunction接收到的值不同每個按鈕和過程。 – m0dest0

+0

+1很好的例子。 – m0dest0

1

我f MyFunction是一個javascript函數,您可以在其末尾添加location.reload()以重新加載頁面。

1

在這裏,我就如何動態地添加clickevents一些示例代碼:

void Page_Load(Object sender, EventArgs e) 
    { 
    HtmlInputButton NewButtonControl = new HtmlInputButton("submit"); 
    NewButtonControl.ID = "NewButtonControl"; 
    NewButtonControl.Value = "Click Me"; 

    // Create an EventHandler delegate for the method you want to handle the event 
    // and then add it to the list of methods called when the event is raised. 
    NewButtonControl.ServerClick += new System.EventHandler(this.Button_Click); 

    // Add the new HtmlInputButton control to the Controls collection of the 
    // PlaceHolder control. 
    ControlContainer.Controls.Add(NewButtonControl); 
    } 

    void Button_Click(Object sender, EventArgs e) 
    { 
    // Display a simple message. 
    Message.InnerHtml = "Thank you for clicking the button."; 
    } 

刷新頁面ü可以調用javascript函數,這樣的事情:

<script type="text/javascript"> 
    function reloadPage() 
    { 
    window.location.reload() 
    } 
</script> 

或試試這個:

Response.Redirect(Request.Url.AbsoluteUri); 

我希望它有幫助

+0

+1,你的例子給了我一個關於如何處理事件的想法 – m0dest0