2011-01-31 31 views
5

私の状況に関する多くの質問を読んだことがありますが、そのような質問は見つかりませんでした。私は現在、リピーターに4つのバインドされた項目があります。リピーターのボタンをクリックするとエラーが発生し、以下はマークアップとコードビハインドです。誰かがなぜこれが起こっているのか、それに対する修正を私に説明することはできますか? (私は、ページのdeclerationを除外し、ちょうどPage_Loadイベントが含まれている。私はカットし、過去の完全なコード必要がある場合は私に知らせて)無効なポストバックまたはコールバック引数を引き起こすリピータコントロール

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
    <asp:Repeater ID="rptFoo" runat="server"> 
     <ItemTemplate> 
     <asp:Button ID="btnfoo" runat="server" /> 
     </ItemTemplate> 
    </asp:Repeater> 
    </div> 
    </form> 
</body> 
</html> 

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
Dim items As New List(Of String) 
items.Add("test1") 
items.Add("test2") 
items.Add("test3") 
items.Add("test4") 
rptFoo.DataSource = items 
rptFoo.DataBind() 
End Sub 
+2

[データバインドされたコントロールで無効なポストバックまたはコールバック引数](http://stackoverflow.com/questions/293699/invalid-postback-or-callback-argument-with-databound-controls)の可能な複製 – AakashM

答えて

0
を必要と包み、私の質問に答えます

私はここで答えを繰り返すので、リンクする必要はありません

問題は、ページのLoadイベントでコントロールのデータを読み込んでDataBind()メソッドを呼び出すことです。しかし、イベントが発生する前にDataBind()メソッドが呼び出された場合、コントロールの命名規則が変更されると、上記の例外が生成されるようです。

解決方法これをif(!IsPostback)DataBind()に変更し、イベントハンドラの最後でDataBind()メソッドを呼び出します。変更に影響を与えるには、ハンドラの終わりにほとんどの時間を呼び出す必要があります。

これが問題ではなく、JavaScriptを使用してコントロールのクライアントサイドを変更する場合は、this articleをチェックしてください。

3

itemコマンド操作を実行すると、Repeaterがデータソース(バインディング)を取得しているために起こります。ちょうどif(not ispostback)page_loadメソッドに追加してください。

関連する問題