2016-12-14 17 views
0

我有很多按鈕,當用戶點擊一個按鈕時,我希望它用ajax更新一個標籤。asp窗體中的Ajax不會被調用

我實現AJAX我的模板像這樣:

<form runat="server"> 
    <asp:ScriptManager ID="ScriptManagerPull" runat="server"> 
    </asp:ScriptManager> 
    <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
     <ContentTemplate> 
      <div runat="server" id="SiteContent"> 
      </div> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
</form> 

的按鈕是動態生成的;

foreach (MyDTO myDTO in List) { 
    Button ButtonPull = new Button(); 
    ButtonPull.Text = "Pull"; 
    ButtonPull.ID = articleDTO.ArticleID.ToString(); 
    ButtonPull.ControlStyle.CssClass = "btn btn-default"; 
    ButtonPull.Click += new EventHandler(Pull_Click); 
    SiteContent.Controls.Add(ButtonPull); 
} 

現在的問題是,當用戶點擊按鈕時,事件不會被調用。這是行不通的:

protected void Pull_Click(object sender, EventArgs e) { 
    // Button button = sender as Button; 
    LabelTest.Text = "Cool"; 
} 

我該怎麼做?

感謝。

+0

您是否在瀏覽器中看到動態按鈕形成? – CodingYoshi

+0

是的,我看到他們。 –

+0

對不起有幾件事。我發佈了一個答案。 – CodingYoshi

回答

0

我假設你不只是想調用點擊事件,但可能通過AJAX將一些數據從客戶端傳遞到服務器。最直接的方式來做到這一點,沒有ScriptManager,UpdatePantel和所有這一切。我創建了一個按鈕,並且在服務器端沒有單擊事件處理程序。但它在客戶端有一個。

protected void Page_Load(object sender, EventArgs e) 
{ 
    Button ButtonPull = new Button(); 
    ButtonPull.Text = "Pull"; 
    ButtonPull.ID = "Button1"; 
    ButtonPull.ControlStyle.CssClass = "btn btn-default"; 
    this.Form.Controls.Add(ButtonPull); 

    // You can pass anything you want to the server. Here I am passing 1111 
    // You can pass things from the client side as well. Whole JSON objects as well 
    ButtonPull.OnClientClick = "callServer(1111);return false;"; // return false so button does not postback 
} 

我也在這個頁面的代碼後面加了這個方法。這是一個web方法,它接收一個id爲int並將其附加到一個字符串並將該字符串返回給客戶端。

[WebMethod] 
[ScriptMethod(UseHttpGet = true, 
ResponseFormat = ResponseFormat.Json, XmlSerializeString = false)] 
public static string GetStuffFromServer(int id) 
{ 
    return "Works like a charm! And id is " + id ; 
} 

最後添加到我的觀點。當在客戶端點擊按鈕時,它會調用這個函數並按照我們在創建按鈕時所指示的那樣傳遞1111。在這個函數內部,我們使用jQuery ajax調用服務器方法GetSuffFromServer。如果一切順利,服務器將返回,我們將在這裏成功並警告從服務器返回的數據。同樣,服務器可以返回任何需要的東西。這種方法可以發送任何需要的服務器。

<script> 
    function callServer(id) { 
     $.ajax({ 
      type: "GET", 
      contentType: "application/json; charset=utf-8", 
      url: "default.aspx/GetStuffFromServer?id=" + id, 
      success: function (data) 
      { 
       alert(data.d); 
      }, 
      error: function (data) { alert(data);} 
     }); 
    } 
</script> 

在App_Start文件夾中的文件RouteConfig.cs變化的最後一件事這一行:

settings.AutoRedirectMode = RedirectMode.Permanent; 

這樣:

settings.AutoRedirectMode = RedirectMode.Off; 

這種變化是因爲我打電話時,使用友好的URL web方法:default.aspx/GetStuffFromServer?id =