私はフォーラムを検索して、数日間これを解決しようとしていますが、行き詰まっています。これが非常に単純で明白なものであり、私が見逃していた場合はお詫び申し上げます。私の問題に似た投稿を見つけましたが、まったく同じではありません。
私の Web アプリが部分的に行うことの概要は次のとおりです。
- 単純な asp:dropdownlist を示します
ユーザーが値を選択すると、適切な更新パネルが表示され (これらの更新パネルは Page_Load コード ビハインドで表示 = false)、編集可能なグリッドビューが表示されます。
Protected Sub DropDownList1_SelectedIndexChanged(sender As Object, e As EventArgs) If DropDownList1.SelectedItem.Value <> "0" Then If DropDownList1.SelectedValue = "Activate or Inactivate Users" Then UpdatePanel1.Visible = True End If ...
<asp:GridView ID="GridView3" runat="server" AllowSorting="True" AutoGenerateColumns="False" AutoGenerateEditButton="True" DataSourceID="SqlDataSource2"> <Columns> <asp:BoundField DataField="iMemberId" HeaderText="iMemberId" InsertVisible="False" ReadOnly="True" SortExpression="iMemberId" /> <asp:BoundField DataField="sFname" HeaderText="sFname" SortExpression="sFname" /> <asp:BoundField DataField="sSname" HeaderText="sSname" SortExpression="sSname" /> <asp:BoundField DataField="dDateCreated" HeaderText="dDateCreated" SortExpression="dDateCreated" /> <asp:BoundField DataField="sEmailAddress" HeaderText="sEmailAddress" SortExpression="sEmailAddress" /> <asp:BoundField DataField="sMobileNo" HeaderText="sMobileNo" SortExpression="sMobileNo" /> <asp:CheckBoxField DataField="bActiveMember" HeaderText="bActiveMember" SortExpression="bActiveMember" /> </Columns> </asp:GridView> <asp:SqlDataSource ID="SqlDataSource2" Runat="server" ConnectionString="<%$ ConnectionStrings:PTCCHomeTestConnectionString %>" SelectCommand="SELECT * FROM [MemberTable] ORDER BY [sSname]" UpdateCommand="UPDATE MemberTable SET sFname = @sFname, sSname = @sSname, sEmailAddress = @sEmailAddress, sMobileNo =, bActiveMember = WHERE (iMemberId = @iMemberId)"> <UpdateParameters> <asp:Parameter Name="sFname" /> <asp:Parameter Name="sSname" /> <asp:Parameter Name="sEmailAddress" /> <asp:Parameter Name="iMemberId" /> </UpdateParameters> </asp:SqlDataSource> </ContentTemplate>
各グリッドビューの選択クエリと更新クエリはテスト済みで、正常に動作します。それらがすべて表示されるページでグリッドビューをテストしました(すべて正常に動作しますが、ユーザーがドロップダウンリストから選択したものに応じて、適切なグリッドビューのみを表示したいと思います.
- ユーザーは、選択した行で [編集] をクリックして更新できる必要があります。グリッドビューは正常に表示され、適切に入力されていますが、ユーザーが [編集] (更新) リンクをクリックすると、次のエラーが表示されます。
「ポストバックまたはコールバック引数が無効です。イベント検証は、構成内またはページ内の <%@ Page EnableEventValidation="true" %> を使用して有効にされています...
スタックトレース:
[ArgumentException: 無効なポストバックまたはコールバック引数。イベントの検証は、構成またはページで使用して有効にします。セキュリティ上の理由から、この機能は、ポストバック イベントまたはコールバック イベントへの引数が、それらを最初にレンダリングしたサーバー コントロールから発信されていることを確認します。データが有効で期待される場合は、ClientScriptManager.RegisterForEventValidation メソッドを使用して、検証のためにポストバックまたはコールバック データを登録します。] System.Web.UI.ClientScriptManager.ValidateEvent(String uniqueId, String argument) +144 System.Web.UI.Control.ValidateEvent(String uniqueID, String eventArgument) +111 System.Web.UI.WebControls.GridView.RaisePostBackEvent(String eventArgument) +32 System.Web.UI.WebControls.GridView.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +13 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +9643314 System.Web.UI.Page.ProcessRequestMain (ブール値 includeStagesBeforeAsyncPoint、ブール値 includeStagesAfterAsyncPoint) +1724 バージョン情報: Microsoft .NET Framework バージョン:4.0.30319; ASP.NET バージョン:4.0.30319.17929"`
私は次のことを試しました(しかし、それでも同じエラーです):
イベント検証のために、select と update からすべての値を登録する Render サブを追加しました。
Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
'override (page) Render and loop over the GridView Rows
Dim row As GridViewRow
For Each row In GridView3.Rows
If (row.RowType = DataControlRowType.DataRow) Then
Page.ClientScript.RegisterForEventValidation(New System.Web.UI.PostBackOptions(Me.GridView3, "Select$" + row.RowIndex.ToString()))
Page.ClientScript.RegisterForEventValidation(New System.Web.UI.PostBackOptions(Me.GridView3, "Update$" + row.RowIndex.ToString()))
End If
Next
MyBase.Render(writer)
...
また、グリッドビューとデータソースを再バインドしようとしました:
If Not (IsPostBack) Then
SqlDataSource2.DataBind()
GridView3.DataBind()
End If
また、Page タグに EnableEventValidation="false" を追加しようとしました。編集リンクを押すことができるようになりましたが、UpdatePanel が消えて (Page_Load に従って)、ドロップダウン リストから値を選択すると、編集モードの行で再び表示されますが、行の代わりに空白が表示されます。現在の値。
また、グリッドビューが含まれている同じ updatePanel の外でグリッドビューのデータソースを定義しようとしましたが、違いはありませんでした。
確認のために、Page_Load コードで UpdatePanels visible=false を作成しないと、ユーザーがそれらすべてを表示できるようになり、グリッドビューは行の更新で正常に動作します。これは、私が正しく理解しているかのように、問題はステートレスにあると考えさせられます。編集リンクが押されると、Page_Load コードが再度呼び出され、ドロップダウンリスト値が保持されなくなり、グリッドビューが表示されている updatepanel が再び false になります。 .
では、Page_Load ではないドロップダウンリストの選択に応じて updatepanels を非表示にする他の方法はありますか? これは解決策がある場所でしょうか?
または、編集リンク (Page_Load 呼び出し) が完了した後、ドロップダウンリストで選択した値を保持する別の方法はありますか?
私は正しい方向に進んでいると思いますが、少しのガイダンスを得ることが本当に役に立ちます。