2016-12-14 18 views
0

私は多くのボタンを持っています。ユーザーがボタンをクリックすると、ajaxでラベルを更新します。asp webフォームの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

私は単にclickイベントを呼び出すのではなく、AJAX経由でクライアントからサーバーにデータを渡すことを前提としています。 ScriptManagerUpdatePantelなど、これを行うことなく、これを行う最も簡単な方法です。私は1つのボタンを作成し、それはサーバー側でクリックイベントハンドラを持っていません。しかし、それはクライアント側に1つあります。

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 
} 

また、このメソッドをページのコードの背後に追加しました。これは、idをintとして受け取って文字列に追加し、その文字列をクライアントに返すWebメソッドです。

[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を呼び出しています。すべてがうまくいけば、サーバーは復帰し、ここで成功し、サーバーから返されたデータを警告します。ここでも、サーバーは必要なものを返すことができます。そして、このメソッドはサーバーに必要なものを送ることができます。 App_StartフォルダのRouteConfig.csファイルの変更で

<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> 

最後の一つです。この行:これまで

settings.AutoRedirectMode = RedirectMode.Permanent; 

settings.AutoRedirectMode = RedirectMode.Off; 

呼び出すときに、私はフレンドリーURLを使用していますので、この変更がありますウェブメソッド:default.aspx/GetStuffFromServer?id =

関連する問題