2011-12-22 11 views
1

J'ai une page Web avec une grille. Lorsque vous cliquez sur Modifier, une fenêtre contextuelle s'ouvre. Dans la fenêtre modale popup, il y a une grille et en dessous une liste déroulante et un bouton de sauvegarde. Lorsque vous cliquez sur Enregistrer, la valeur sélectionnée est insérée dans la grille située dans la fenêtre modale.Erreur lors de la publication

Tout fonctionne bien pour la première fois, mais si vous fermez déjà la fenêtre modale et que vous recommencez le processus (Cliquez sur modifier dans la première grille> montre fenêtre modale> sélectionne un élément sur le ddl> hit bouton Enregistrer) une erreur de publication se produit. Im en utilisant un panneau de mise à jour et j'ai aussi ajouté un PostBackTrigger sur le bouton Ajouter dans la fenêtre modale ..

Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation. 
code

dans le bouton d'édition de la première grille (cela appelle la fenêtre modale pour ouvrir)

protected void grd_depreciation_RowEditing(object sender, GridViewEditEventArgs e) 
    { 
     Guid DepID = new Guid(grd_depreciation.DataKeys[e.NewEditIndex].Values[0].ToString()); 

     //Show the Depreciation Modal Popup 
     EditModalDepPopup.Show(); 
     //btnModalDepreciation_Click(sender,e); 

     //checks the type of depreciation.. Network or Equipment 
     DropDownList ddldescriptiondep = (DropDownList)(grd_depreciation.Rows[e.NewEditIndex].Cells[0].FindControl("ddlDescriptionDep")); 
     var incotype = (ddldescriptiondep.SelectedItem).ToString(); 
     populategrd_Editdepreciation(DepID, incotype); 

    } 

Voici le code dans le bouton Ajouter dans la fenêtre modale (celui qui provoque l'erreur):

MarginAnalysi checkmarginanalysisid = MarginAnalysisAssumption_worker.get(a => a.ProjectCode == lbl_projectCode.Text).SingleOrDefault(); 
      DepreciationMatrix tblDepreciationMatrix = new DepreciationMatrix(); 

      tblDepreciationMatrix.DepMatrixID = Guid.NewGuid(); 
      tblDepreciationMatrix.DepID = new Guid(ViewState["DepID"].ToString()); 
      tblDepreciationMatrix.IncCapexOpexID = new Guid(ddDepreciationModalEmpty.SelectedValue); 
      DepreciationMatrix_worker.insert(tblDepreciationMatrix); 
      DepreciationMatrix_worker.submit(); 

EditModalDepPopup.Show(); 

      populategrd_Editdepreciation(new Guid(ViewState["DepID"].ToString()), ViewState["incotype"].ToString()); 

code pour peupler la grille fenêtre modale:

//Populate Edit Depreciaiton Grid on Modal 
    public void populategrd_Editdepreciation(Guid DepID, string incotype) 
    { 
     ViewState["DepID"] = DepID; 
     ViewState["incotype"] = incotype; 
     var x = from a in DepreciationMatrix_worker.get(a => a.DepID == DepID) 
       select new { a.DepMatrixID, a.IncCapexOpexID }; 

     grd_Editdepreciation.DataSource = x; 
     grd_Editdepreciation.DataBind(); 

     //Populate dropdownlist on edit depreciation modal 

     MarginAnalysi checkmarginanalysisid = MarginAnalysisAssumption_worker.get(a => a.ProjectCode == lbl_projectCode.Text).SingleOrDefault(); 

     //Selects eithers Equipment or Network Depreciation 
     string test = incotype.ToUpper(); 

     if (test.Contains("EQUIPMENT")) 
     { 
      var dropdowndepreciationmodal = from a in tblIncCapexOpex_worker.get(a => a.MarginAnalysisID == checkmarginanalysisid.MarginAnalysisID && a.IncCoTypeID == "CAPEX" && a.DepreciationTypeID == "EQUIPMENT") 
              select new { text = a.Description, value = a.IncCapexOpexID }; 

      populateDropdownlist(ddDepreciationModalEmpty, dropdowndepreciationmodal, true); 
     } 
     else 
     { 
      var dropdowndepreciationmodal = from a in tblIncCapexOpex_worker.get(a => a.MarginAnalysisID == checkmarginanalysisid.MarginAnalysisID && a.IncCoTypeID == "CAPEX" && a.DepreciationTypeID == "NETWORK") 
              select new { text = a.Description, value = a.IncCapexOpexID }; 

      populateDropdownlist(ddDepreciationModalEmpty, dropdowndepreciationmodal, true); 
     } 



    } 

Code Aspx pour la sortie modale. Ce code est situé à l'intérieur d'une balise updatepanel. Jetez un oeil à ma réponse à cette question pour avoir une idée de ce qui ne va pas.

<asp:Button ID="btnModalDepreciation" CssClass="popup_ButtonsHide" runat="server" 
                   Text="Click here to show the modal" /><cc1:ModalPopupExtender BehaviorID="test4" 
                    ID="EditModalDepPopup" BackgroundCssClass="ModalPopupBG" runat="server" TargetControlID="btnModalDepreciation" 
                    PopupControlID="DivEditDepTab" Drag="True" PopupDragHandleControlID="DepPopupHeader" 
                    DynamicServicePath="" Enabled="True"> 
                   </cc1:ModalPopupExtender> 
                  <div id="DivEditDepTab" style="display: none;" class="popupConfirmation2"> 
                   <div class="popup_Container"> 
                    <div class="popup_Titlebar" id="DepPopupHeader"> 
                     <div class="TitlebarLeft"> 
                      Depreciation Items</div> 
                     <div class="TitlebarRight"> 
                     </div> 
                    </div> 
                    <div class="popup_Body"> 
                     Depreciation Details 
                     <br /> 
                     <asp:Table ID="Table25" runat="server" Width="400px"> 
                      <asp:TableRow> 
                       <asp:TableCell> 
                        <asp:GridView ID="grd_Editdepreciation" runat="server" AutoGenerateColumns="False" 
                         Width="100%" OnRowCancelingEdit="grd_Editdepreciation_RowCancelingEdit" OnRowDeleting="grd_Editdepreciation_RowDeleting" 
                         OnRowEditing="grd_Editdepreciation_RowEditing" OnRowUpdating="grd_Editdepreciation_RowUpdating" 
                         OnRowDataBound="grd_Editdepreciation_RowDataBound" DataKeyNames="DepMatrixID"> 
                         <Columns> 
                          <asp:TemplateField HeaderText="Depreciation" SortExpression="Depreciation"> 
                           <EditItemTemplate> 
                            <asp:DropDownList ID="ddDepreciationModal" runat="server" Width="100%"> 
                            </asp:DropDownList> 
                            <asp:HiddenField ID="hiddenIncCapexOpexID" runat="server" Value='<%# Bind("IncCapexOpexID") %>' /> 
                           </EditItemTemplate> 
                           <ItemTemplate> 
                            <asp:DropDownList ID="ddDepreciationModal" runat="server" Enabled="False" Width="100%"> 
                            </asp:DropDownList> 
                            <asp:HiddenField ID="hiddenIncCapexOpexID" runat="server" Value='<%# Bind("IncCapexOpexID") %>' /> 
                           </ItemTemplate> 
                          </asp:TemplateField> 
                          <asp:TemplateField ShowHeader="False"> 
                           <EditItemTemplate> 
                            <asp:LinkButton ID="btnUpdateDepModal" runat="server" CausesValidation="True" CommandName="Update" 
                             Text="Update"></asp:LinkButton>&nbsp;<asp:LinkButton ID="LinkButton2" runat="server" 
                              CausesValidation="False" CommandName="Cancel" Text="Cancel"></asp:LinkButton></EditItemTemplate> 
                           <ItemTemplate> 
                            <asp:LinkButton ID="btnEditDepModal" runat="server" CausesValidation="False" CommandName="Edit" 
                             Text="Edit"></asp:LinkButton>&nbsp;<asp:LinkButton ID="btnDeleteDepModal" runat="server" 
                              CausesValidation="False" CommandName="Delete" Text="Delete"></asp:LinkButton> 
                            <%-- <cc1:ConfirmButtonExtender ID="confirm1" TargetControlID ="btnDeleteDepModal" ConfirmText="Are you sure you want to delete this?" runat="server"> 
                            </cc1:ConfirmButtonExtender>--%> 
                              </ItemTemplate> 
                          </asp:TemplateField> 
                         </Columns> 
                         <EmptyDataTemplate> 
                          No Data Found</EmptyDataTemplate> 
                        </asp:GridView> 
                       </asp:TableCell></asp:TableRow> 
                     </asp:Table> 
                     <asp:Table ID="Table26" runat="server" Width="400px"> 
                      <asp:TableRow> 
                       <asp:TableHeaderCell>Depreciation</asp:TableHeaderCell></asp:TableRow> 
                      <asp:TableRow> 
                       <asp:TableCell Width="70%"> 
                        <asp:DropDownList ID="ddDepreciationModalEmpty" runat="server" Width="100%"> 
                        </asp:DropDownList> 
                       </asp:TableCell><asp:TableCell Width="30%"> 
                        <asp:Button ID="btnAddDepreciationItem" runat="server" Text="Add" Height="26px" OnClick="btnAddDepreciationItem_Click" 
                         Width="70%" /></asp:TableCell></asp:TableRow> 
                     </asp:Table> 
                     <asp:ValidationSummary ID="ValidationSummary22" runat="server" ValidationGroup="AddDepreciationModal" /> 
                     <asp:ValidationSummary ID="ValidationSummary23" runat="server" ValidationGroup="DeleteDepreciationModal" /> 
                    </div> 
                    <div class="popup_Buttons"> 
                     <asp:Button ID="btnCancelDepreciationModal" runat="server" Text="Close" OnClick="CancelDepreciationItem_Click" /></div> 
                   </div> 
                  </div> 
+0

vous avez dit 'j'ai également ajouté un postbacktrigger au bouton d'ajout à l'intérieur de la fenêtre modale'? avez-vous essayé sans le «postbacktrigger»? Vérifiez [http://msdn.microsoft.com/en-us/library/ms223397.aspx](ClientScriptManager.RegisterForEventValidation, méthode (chaîne)) – Bastardo

+0

@ OkayGuy oui j'ai déjà fait.Même erreur. – anonymous1110

Répondre

0

https://stackoverflow.com/a/8572928/168371

Le problème est pas dans votre code, mais un certain contrôle qui est pas à l'intérieur d'un panneau de mise à jour et a anciennes valeurs dans le balisage.

Veuillez commenter pour toute aide supplémentaire.

+0

Salut, à la fois la liste déroulante et la grille est déjà situé à l'intérieur d'un panneau de mise à jour .. – anonymous1110

+0

S'il vous plaît envoyer le code aspx aussi. –

+0

Salut, ive a déjà collé le code aspx. Sachez que je n'ai collé que le code où le modalpopout a été créé. Je ne peux pas coller les autres puisque l'aspx était trop grand. – anonymous1110

Questions connexes