2013-02-20 455 views
0

我有一個GirdViewGirdview我有一個Checkbox列。 CheckboxAutoPostback屬性設置爲TRUE因爲我正在做Checkboxchecked狀態的一些數據庫工作。現在我與JqueryDialogBox代替正常javascript confirm盒,但當用戶checkcheckbox對話框出現,然後用戶必須確認他們是否確信他們要選中該複選框,如果他們按YSE則複選框被選中,然後問題我希望服務器端事件發生。取而代之的是,只要用戶選中複選框和服務器端事件觸發,然後即使按下「否」,對話框也會出現,數據庫已用YES更新。jquery對話不等待用戶輸入和服務器端事件immidiatly發生

這是我的代碼。

HTML

<asp:GridView ID="gvOrders" runat="server" AutoGenerateColumns="false" 
CssClass="gvClickCollectOrders" DataKeyNames="OrderId" OnRowDataBound="gvOrders_RowDataBound" 
AllowPaging="true" OnPageIndexChanging="gvOrders_PageIndexChanging"> 
    <Columns> 
     <asp:BoundField DataField="OrderId" Visible="false" /> 
     <asp:BoundField DataField="OrderNumber" HeaderText="Order No" DataFormatString="WWW {0}" 
     /> 
     <asp:TemplateField HeaderText="Order Date"> 
      <ItemTemplate> 
       <asp:Label ID="orderDateText" Text="" runat="server"></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Order Ship Date"> 
      <ItemTemplate> 
       <asp:HyperLink ID="orderShipDateAndTrackingData" CssClass="trackingInfo" 
       runat="server" Target="_blank" Text="" NavigateUrl=""></asp:HyperLink> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Customer Name"> 
      <ItemTemplate> 
       <%# Eval("BillToFirstName") %>&nbsp; 
        <%# Eval("BillToLastName") %> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Received In Store"> 
      <ItemTemplate> 
       <asp:CheckBox ID="cbIsReceived" runat="server" AutoPostBack="true" Checked='<%# MWClickAndCollectHelper.CheckOrderReceivedStatus(AlwaysConvert.ToInt(Eval("OrderId"))) %>' 
       OnCheckedChanged="cbIsReceived_CheckedChanged" CssClass="isReceivedCheckBox" 
       /> 
       <asp:Label ID="receivedDateText" Text="" runat="server"></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Collected By Customer"> 
      <ItemTemplate> 
       <asp:CheckBox ID="cbIsCollected" runat="server" AutoPostBack="true" Checked='<%# MWClickAndCollectHelper.CheckOrderCollectedStatus(AlwaysConvert.ToInt(Eval("OrderId"))) %>' 
       OnCheckedChanged="cbIsCollected_CheckedChanged" CssClass="isCollectedCheckBox" 
       /> 
       <asp:Label ID="collectedDateText" Text="" runat="server"></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
    <EmptyDataTemplate> 
     <asp:Label ID="emptyGrid" runat="server" Text="There are no 'Click and Collect' orders placed for this store." 
     CssClass="emptyGridMessage"></asp:Label> 
    </EmptyDataTemplate> 
</asp:GridView> 

jQuery的

< script type = "text/javascript" > 

var isReceivedCheckBox = $('.isReceivedCheckBox input[type=checkbox]'); 
var isCollectedCheckBox = $('.isCollectedCheckBox input[type=checkbox]'); 
var def = $.Deferred(); 

function confirmDialog(msg) { 
    var dialog = $("<div id=\"dialog\">" + msg + "</div>"); 
    $(dialog).dialog({ 
     autoOpen: true, 
     width: 300, 
     height: 200, 
     resizable: false, 
     modal: false, 
     buttons: { 
      'Yes': function() { 
       def.resolve(); 
       $(this).dialog("close"); 
      }, 
       'No': function() { 
       def.reject(); 
       $(this).dialog("close"); 
      } 
     }, 
     close: function() { 
      $(this).remove(); 
     } 
    }); 
    return def.promise(); 
} 

$(function() { 
    $(isReceivedCheckBox).on("change", function() { 
     var checked = this.checked; 
     var checkbox = this; 
     if (checked) { 
      confirmDialog("are your sure you want to check this checkbox?").done(function() { 
       checkbox.checked = true; 
      }) 
       .fail(function() { 
       checkbox.checked = false; 
      }); 
     } else { 
      confirmDialog("are your sure you want to uncheck this checkbox?").done(function() { 
       checkbox.checked = false; 
      }) 
       .fail(function() { 
       checkbox.checked = true; 
      }); 
     } 
    }); 
}); < /script> 

回答

1

不知道是否有另一種方式,但你可以手動執行回發。 設置AutoPostBack = false並使用__doPostBack函數。

www.ilearnttoday.com/tag/how-to-use-__dopostback

+0

我手工做回發... +1的鏈接的基本思想......但不知何故,我不明白什麼是錯我的代碼..和爲什麼它不與AutoPostbask – 2013-02-20 11:56:35

+1

工作,我認爲他們兩人同時開槍並行。基本上,當你在等待確認時,回發事件到達服務器完成其工作。主要原因:你用jquery和服務器端複選框的回覆操作同時處理由.net框架處理的確認而分開。 – genesistr 2013-02-20 12:41:32

相關問題