2016-12-14 2 views
0

У меня есть много кнопок, и когда пользователь нажимает один, я хочу, чтобы он обновил метку с помощью ajax.Ajax в asp веб-формах не называется

Я реализовал 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. Самый простой способ сделать это, без 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 
} 

Я также добавил этот метод к коду моей страницы. Это веб-метод, который получает идентификатор как 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 call для вызова метода сервера 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> 

Одна последняя вещь в изменении RouteConfig.cs файла App_Start папки эта строка:

settings.AutoRedirectMode = RedirectMode.Permanent; 

к этому:

settings.AutoRedirectMode = RedirectMode.Off; 

Это изменение происходит потому, что я использую дружественный URL при вызове веб-метод: default.aspx/GetStuffFromServer? id =

Смежные вопросы