よくある質問をよく読んでいる無効なポストバックまたはコールバックの引数エラーメッセージ。GridView.DataBind呼び出し中にユーザーがクリックすると、ArgumentExceptionが発生する
リンク/リダイレクト(この場合はASP LinkButtonですが、ASPボタンを使用すると同じ結果が発生します)をクリックしてWebページを急いで、WebページGridViewがデータを完成する前にこのエラーが発生します結合。
バインドされるデータが非常に大きく、理想的には、ページングを追加して実行を高速化する必要があります。ただし、クリック以外にも、クライアントスクリプトを含めて、変更されるデータはありません。なぜこのエラーが発生しているのか不明です。
全エラー:
Invalid postback or callback argument. Event validation is enabled using 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.
私は、セキュリティ上の理由から、イベントの検証を無効にしたくないと私は大のDataBind操作がその理由であることを知っているが、私は理由を知りません。
私も簡単なテストとして、グリッドの検証を無効にすることを試してみましたが、これで問題が解決しませんでした:
myGrid.ValidateRequestMode = ValidateRequestMode.Disabled
のLinkButtonはないあるPostBackUrl
を使用して、代わりに+ Response.Redirect
をクリックしてイベントを使用している(私はすべての無関係なコードを削除しました)。
の前に、LinkButtonがで作成されています。
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
Dim application As IApplication
If Not IsPostBack Then
application = Session("App")
If application IsNot Nothing Then
AddLinkButton("Test", "EntityPage", CommandType.PageLink)
ShowData(application)
End If
End If
End Sub
Private Sub AddLinkButton(label As String, commandArgument As String,
Optional command As CommandType = CommandType.Link)
Dim linkBtn As New LinkButton()
linkBtn.Text = label
linkBtn.CssClass = "myLinkBtn"
linkBtn.CommandName = command.ToString
linkBtn.CommandArgument = commandArgument
AddHandler linkBtn.Click, AddressOf LinkButton_Click
panel.Controls.Add(linkBtn)
End Sub
Private Sub LinkButton_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim linkBtn As LinkButton = CType(sender, LinkButton)
Select linkBtn.CommandName
Case "Link" :
Response.Redirect(linkBtn.CommandArgument, False)
' more cases + additional logic that I removed from the example
End Select
End Sub
Friend Sub ShowData(application As IApplication)
Dim entities As List(Of Entity)
If Not IsPostBack Then
entities = application.GetEntities()
myGridView.DataSource = entities
myGridView.DataBind()
End If
End Sub
なぜこれが起こっていると思いますか?また、データのバインドを正常に中断させる方法はありますか?
編集:また、LinkButtonの代わりにButtonを使用し、UseSubmitBehavior = True
を使用して同じ結果を試しました。
を、ちょうど作成しますリンク(!)(aタグ)とlinkbuttonを使用しないでください。 Linkbuttonはポストバックを起こし、link-tagは発生しません。ユーザーが別のページへのリンクをたどるようにしたいので、ポストバックはここでは必要ありません。ポストバックはページ全体を解析対象のサーバーに戻しますが、時間がかかります/非効率的で、ここでは不要です。 – Esko
@Eskoこれは、 "LinkButton_Click"イベントハンドラを実行できるようにすることもできますか? – Mayron
私は恐れていません、あなたの例では、リダイレクト以外の何もしていない、その前に何をする必要がありますか? – Esko