1

リピーターコントロール内のボタンにアクセスしようとしていますが、かなり失敗しています。現在映画館で上映中の映画を表示するページにリピーターを設定しています。2 つのボタンを作成し、リピーターに追加しました。1 つは予告編用、もう 1 つはレビュー用です。レビューのために、ページングが有効になっている別のリピーターを持つ別のページにリンクしたいと思います。ユーザーがレビュー ボタンをクリックすると、その特定の映画のレビューのみを表示するページに移動する必要があります。これは私が持っているコードです:

マークアップ: リピーター:

   <asp:Repeater ID="movies" runat="server">
    <ItemTemplate>
        <table width="641px">
            <tr>
                <td>
                    <span style="font-weight:bold;font-size:16px;">
                    <%# Container.DataItem("MovieTitle")%>
                        </span>
                </td>
                <td>
                    <span style="float:right;">
                    <asp:Image ID="Image1" runat="server" ImageUrl = '<%# Eval("Total")%>' style="width:80px;height:14px;"/>
                   </span>
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <hr style="height:1px;border-bottom:none;color:#e3e3e3;"/>
                </td>
            </tr>
            </table>
        <table width="641px">
            <tr>
                <td>
                    <asp:Image ID="Image2" runat="server" ImageUrl = '<%# Eval("MovieImageFileName")%>' style="width:180px;height:108px;border:1px solid #e3e3e3;"/>
                </td>
                <td style="vertical-align:top;">
                    <%# Container.DataItem("Synopsis")%>
                </td>
            </tr>
            </table>
        <table width="641px">

            <tr>
                <td>
                    <span style="float:right">
                    <asp:Button ID="btnTrailer" runat="server" Text="Trailer" BackColor="#FF9900" ForeColor="White" />&nbsp;
                    <asp:Button ID="btnReview" runat="server" Text="Review" BackColor="#FF9900" ForeColor="White" CommandName="Review" />
                    </span>
                </td>
            </tr>
            <tr>
                <td>
                    <hr style="height:1px;border-bottom:none;color:#e3e3e3;"/>
                </td>
            </tr>
        </table>
    </ItemTemplate>
</asp:Repeater>

分離コード:

Dim movie_title As String
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    Dim myConn As New OleDbConnection
    Dim cmd As New OleDbCommand
    Dim dr, aDataReader As OleDbDataReader
    Dim query, movieID As String
    movie_title = Request.QueryString("id")
    myConn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source = " & _
                Server.MapPath("/App_Data/MovieBoard.accdb"))
    myConn.Open()
    Dim sqlQuery = "Select movieID From Movies"
    Dim aCmd = New OleDbCommand(sqlQuery, myConn)
    aDataReader = aCmd.ExecuteReader()

    If aDataReader.Read() = True Then
        movieID = aDataReader(0)
    Else
        movieID = "0"
    End If

    query = ("Select MovieTitle, Genre, Synopsis, Starring, Total, Director, MovieImageFileName From Movies, MovieReviews, MReviewRatings WHERE Movies.MovieID = MovieReviews.MovieID AND MovieReviews.MReviewID = MReviewRatings.MReviewID AND ReviewerTypeID = 1")
    cmd = New OleDbCommand(query, myConn)
    dr = cmd.ExecuteReader()
    movies.DataSource = dr
    movies.DataBind()
End Sub

Protected Sub movies_ItemCommand(source As Object, e As RepeaterCommandEventArgs)   Handles movies.ItemCommand
    If e.CommandName = "Review" Then
        Response.Redirect("testingreviews.aspx?id = '" & movie_title)
    End If
End Sub

ページを実行するとページが表示されますが、レビュー ボタンをクリックすると次のエラーが表示されます。

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.

私が間違っていることについて何か考えはありますか?私はasp.netに非常に慣れていません。

4

1 に答える 1

1

ボタンにアクセスする場合は、イベント ItemCreated またはその ItemDataBound を使用します。

ムービーを処理します。ItemCreated

その場合、FindControl を使用してボタンを参照できます。

このようなもの

Sub Movies_ItemDataBound(Sender As Object, e As RepeaterItemEventArgs) Handles movies.ItemDataBound
      Dim Btn As Button = CType(e.Item.FindControl("ButtonName"),Button)
End Sub
于 2012-12-21T12:16:12.703 に答える