【问题标题】:Error on Postback回发错误
【发布时间】:2011-12-22 06:11:14
【问题描述】:

我有一个网页,上面有一个网格。单击编辑时,将打开一个弹出模式窗口。在弹出模式窗口内,有一个网格,在其下方有一个下拉列表和保存按钮。当您单击保存时,所选值将插入到位于模态窗口的网格中。

第一次一切正常,但是如果您已经关闭了模式窗口并且碰巧又重新执行了该过程(单击第一个网格上的编辑 > 模式窗口显示 > 在 ddl 上选择一个项目 > 点击保存按钮)发生回发错误。我正在使用更新面板,并且我还在模态窗口内的添加按钮中添加了一个回发触发器..

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. 

第一个网格的编辑按钮中的代码(这会调用模态窗口打开)

 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);

    }

这是模态窗口内的添加按钮中的代码(导致错误的那个):

 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());

在模态窗口上填充网格的代码:

//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);
        }



    }

模态弹出的 Aspx 代码。此代码位于 updatepanel 标记内。

   <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>

【问题讨论】:

  • 你说i also added a postbacktrigger to the add button inside the modal window?你试过没有postbacktrigger吗?检查 [msdn.microsoft.com/en-us/library/… 方法(字符串))
  • @OkayGuy 是的,我已经这样做了。同样的错误。

标签: c# asp.net linq eventvalidation


【解决方案1】:

查看我对这个问题的回答,了解问题所在。

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

问题不在于您的代码,而在于某些控件不在更新面板内并且在标记中有旧值。

请评论以获得任何进一步的帮助。

【讨论】:

  • 嗨,我已经粘贴了 aspx 代码。请注意,我只粘贴了创建 modalpopout 的代码。我不能粘贴其他的,因为 aspx 太大了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多