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。

处理movies.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 回答