2013-03-06 100 views
0

」時出現「無效回發或回調參數」我正在嘗試使jQuery確認對話框調用Web方法。當UpdatePanel中的GridView中的刪除按鈕被點擊時,該對話框被調用。UpdatePanel中的GridView中的按鈕點擊「

但是,當我點擊按鈕時,出現錯誤「無效的回發或回調參數。」我在這裏搜索了一些問題/答案,並嘗試覆蓋Render事件來註冊UpdatePanel。

這裏是我的aspx頁面:

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" 
    CodeBehind="Default.aspx.cs" Inherits="DoPostBack._Default" %> 

<asp:Content ID="conStyles" runat="server" ContentPlaceHolderID="cphStyles"> 
</asp:Content> 
<asp:Content ID="conMain" runat="server" ContentPlaceHolderID="cphMain"> 
    <asp:UpdatePanel ID="upMovies" runat="server" UpdateMode="Conditional" onload="upMovies_Load"> 
     <ContentTemplate> 
      <asp:GridView ID="gvItems" runat="server" CssClass="tbl-movies" AutoGenerateColumns="False"> 
       <Columns> 
        <asp:BoundField DataField="Title" HeaderText="Title" HeaderStyle-CssClass="col-title-header" ItemStyle-CssClass="col-title"/> 
        <asp:BoundField DataField="Director" HeaderText="Director" HeaderStyle-CssClass="col-director-header" ItemStyle-CssClass="col-director" /> 
        <asp:BoundField DataField="Year" HeaderText="Year" HeaderStyle-CssClass="col-year-header" ItemStyle-CssClass="col-year" /> 
        <asp:TemplateField ItemStyle-HorizontalAlign="Left" ItemStyle-CssClass="table-actions"> 
         <ItemTemplate> 
          <asp:ImageButton ID="btnEdit" ImageUrl="Images/edit.png" runat="server" 
           Text="Edit" UseSubmitBehavior="False" /> 
          <asp:ImageButton ID="btnDelete" ImageUrl="Images/delete.png" runat="server" 
           Text="Delete" UseSubmitBehavior="False" CssClass="btn-delete-movie" /> 
          <asp:HiddenField ID="hfMovieId" runat="server" Value='<%# Eval("Id") %>' /> 
         </ItemTemplate> 
        </asp:TemplateField> 
       </Columns> 
      </asp:GridView> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
    <div id="confirmDelete" class="popup popup-confirm"> 
     <div class="popup-title"> 
      <h4>Delete Movie</h4> 
     </div> 
     <div class="popup-content"> 
      <div class="confirm-message"> 
      </div> 
      <div class="buttons center"> 
       <input id="btnDeleteConfirm" type="button" value="OK" class="button btn-confirm" /> 
       <input id="btnDeleteCancel" type="button" value="Cancel" class="button btn-delete-cancel btn-close-popup" /> 
      </div> 
     </div> 
    </div> 
</asp:Content> 
<asp:Content ID="conScripts" runat="server" ContentPlaceHolderID="cphScripts"> 
    <script src="Scripts/site.js" type="text/javascript"></script> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      var btnDelete = $('.btn-delete-movie'); 
      btnDelete.on('click', function (e) { 
       e.preventDefault(); 

       var row = $(this).closest('tr'), 
        title = row.find('.col-title').text(), 
        movieId = parseInt(row.find('input[type=hidden]').val()); 

       showConfirmPopUp('confirmDelete', 
        'Are you sure you want to delete the movie "' + title + '"?', 
        function() { deleteMovie(movieId); }, //call the DeleteMovie web method 
        function() { }); //do nothing else 
      }); 
     }); 

     function deleteMovie(id) { 
      $.ajax({ 
       type: 'POST', 
       contentType: 'application/json', 
       data: '{"id":' + id + '}', 
       url: 'Default.aspx/DeleteMovie', 
       dataType: 'json', 
       success: function (data) { 
        __doPostBack('<%= upMovies.ClientID %>', ''); 
        closePopUp('confirmDelete'); 
       }, 
       error: function (jqXHR, textStatus, errorThrown) { 
        showError(jqXHR, textStatus, errorThrown); 
       } 
      }); 
     } 
    </script> 
</asp:Content> 

代碼隱藏:

public partial class _Default : System.Web.UI.Page 
{ 
    #region Events 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      PopulateMovies(); 
     } 
    } 

    protected override void Render(HtmlTextWriter writer) 
    { 
     ClientScript.RegisterForEventValidation(upMovies.UniqueID); 

     foreach (GridViewRow row in gvItems.Rows) 
     { 
      var btnDelete = row.FindControl("btnDelete"); 
      var btnEdit = row.FindControl("btnEdit"); 
      ClientScript.RegisterForEventValidation(btnDelete.UniqueID); 
      ClientScript.RegisterForEventValidation(btnEdit.UniqueID); 
     } 

     base.Render(writer); 
    } 

    protected void upMovies_Load(object sender, EventArgs e) 
    { 
     PopulateMovies(); 
    } 
    #endregion 

    #region Private Methods 
    private void PopulateMovies() 
    { 
     var data = from m in Movie.GetAll() 
        orderby m.Year descending, m.Title ascending 
        select m; 

     gvItems.DataSource = data; 
     gvItems.DataBind(); 
    } 
    #endregion 

    #region Web Methods 
    [WebMethod] 
    public static object DeleteMovie(int id) 
    { 
     Movie.Delete(id); 
     return UpdateItems(); 
    } 
    #endregion 
} 

我使用jQuery的方法,因爲我不希望使用ModalPopupExtender。我不想將EnableEventValidation設置爲false。

此外,爲什麼點擊刪除按鈕時會調用upMovies_Load?不應該只在確認對話框的確定​​按鈕被點擊時才被調用?

我是一個初學者,幫助將不勝感激。

謝謝:)

+0

再重新綁定JavaScript,請創建您的問題的*** ***小,但完整的樣本 - 沒有人會通讀所有這些代碼,試圖找到你的具體問題。 – Blachshma 2013-03-06 08:44:25

回答

0

好吧,你必須通過

Sys.WebForms.PageRequestManager.GetInstance().add_endRequest(function(){ 
    //$(document).ready() code here 
}); 
相關問題