2013-05-15 3 views
1

вот мой код:обновления панель в диалоговом окне JQuery не деление с работает

<div id="AddFriendDiv" style="display: none"> 
     <asp:TextBox ID="FriendParamtxt" runat="server"></asp:TextBox> 
     <asp:UpdatePanel ID="upd" runat="server"> 
     <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="SearchFriend_btn" EventName="Click" /> 
     </Triggers> 
      <ContentTemplate> 
       <asp:Button ID="SearchFriend_btn" runat="server" OnClick="SearchFriend_btn_Click" Value="Search" /> 
       <asp:Repeater ID="FriendRequestRepeater" runat="server"> 
        <ItemTemplate> 
         <table border="1"> 
          <tr> 
           <td> 
            <img src='<%#Eval("PROFILE_PIC") %>' width="35px" height="35px" alt='<%#Eval("NAME") %>' /> 
           </td> 
           <td> 
            <asp:Label ID="Name_lbl" runat="server" Text='<%#Eval("NAME") %>'></asp:Label> 
           </td> 
           <td> 
            <input type="hidden" id="requestFriendID_hf" /><input type="button" id="addFreind" 
             value="Send Request" /> 
           </td> 
          </tr> 
         </table> 
        </ItemTemplate> 
       </asp:Repeater> 
      </ContentTemplate> 
     </asp:UpdatePanel> 
    </div> 

сторона клиента:

function SendFriendRequest() { 

     var dialogOption = { title: "<u>Add Friend</u>", width: 280, height: 140, modal: false, resizable: false, draggable: true, 
      maxHeight: 340, autoOpen: true, closeOnEscape: true 
     }; 
     var DialogExtendOptions = { "close": true, "maximize": false, "minimize": true, "dblclick": 'minimize', "titlebar": 'transparent' }; 

     $("#AddFriendDiv").dialog(dialogOption).dialogExtend(DialogExtendOptions); 
     $("#AddFriendDiv").show(); 


    } 

сторона сервера:

protected void SearchFriend_btn_Click(object sender, EventArgs e) 
{ 

    DataTable frdrequest= new DataTable(); 
    int clientID =int.Parse(UserID.Value.ToString()); 
    if (FriendParamtxt.Text != "") 
    { 
     frdrequest = SQLHelper.GetAllClientByParam(FriendParamtxt.Text, clientID); 
     if (frdrequest.Rows.Count > 0) 
     { 
      FriendRequestRepeater.DataSource = frdrequest; 
      FriendRequestRepeater.DataBind(); 
     } 
    } 
} 

SendFriendRequest является неоспоримым называется образует тег снаружи, но проблема в том, что событие нажатия кнопки не срабатывает, когда главный div является диалогом, но когда я изменил его на нормальный div работает нормально, кто-нибудь знает решение для этого?

+1

Как я помню JQuery диалоговое окно удаляется из DIV основного дерева в HTML-ап ставит его в конце HTML - из нормального ASP.NET дерево часть. Вот почему postbacks работают некорректно. Я исправляю это, делегируя все клики на некоторые скрытые кнопки за пределами диалога div (копируя необходимые данные и в некоторые скрытые поля), но это довольно слабое решение - может работать для простых приложений, хотя – Pako

+0

работает, но это происходит после его возврата не делайте этого, я помещаю скрытый бутон за диалоговое окно div, и я вызвал щелчок в поиске btn, но он делает обратную передачу, а div div div ушел из-за обратной передачи – Sora

+0

Если вы поместите эту скрытую кнопку внутри панели обновления, это приведет к только частичная обратная передача. Мои навыки asp.net сейчас немного ржавые, но я уверен, что вы можете заставить его работать – Pako

ответ

7

Проблема заключается в том, что пользовательский интерфейс jQuery добавляет диалог к ​​телу, а не к форме. Элементы управления ASP.Net должны быть внутри формы, чтобы функционировать, но, к счастью, это легко исправить. Измените JQuery следующим образом:

$("#AddFriendDiv").dialog(dialogOption) 
    .dialogExtend(DialogExtendOptions) 
    .parent().appendTo($("form:first")); 
$("#AddFriendDiv").show(); 
+0

вы спасли мой день, спасибо u – Sora

+5

Все в порядке, я просто обычный парень. Я надел штаны на одну ногу за раз. – Maloric

+0

hahhaaaaaaaaaaa – Sora

0

Дорогой друг, если вы используете ajaxtoolkite и вы используете UpdatePanel или ScriptManager затем JQuery сделать конфликт с ним, так что вы можете использовать следующие 2 способа, чтобы сделать ваш код работает правильно, то ниже код будет решить вашу проблему

$(document).ready(function() { 
// bind your jQuery events here initially 
}); 

    var prm = Sys.WebForms.PageRequestManager.getInstance(); 

    prm.add_endRequest(function() { 

// re-bind your jQuery events here 

    }); 
1

Это поможет вам

 var dialog = $("#divModal").dialog({ 
      autoOpen: false, 
      height: 515, 
      width: 900, 
      modal: true, 
      draggable: false, 
      resizable: false 
     }); 
     dialog.parent().appendTo(jQuery("form:first")); 
Смежные вопросы