在转发器控制中访问按钮

时间:2012-12-21 11:22:50

标签: asp.net vb.net

我正在尝试 - 非常失败 - 访问转发器控件中的按钮。我在页面上设置了一个转发器,显示当前正在电影院放映的电影。我创建了两个按钮并将它们添加到转发器中 - 一个用于预告片,另一个用于查看。对于审查,我想链接到另一个页面,该页面将启用另一个启用分页的转发器。当用户点击评论按钮时,他们应该被带到仅显示该特定电影的评论的页面。这就是我的代码:

MARKUP: 转发器:

   <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的新手。

1 个答案:

答案 0 :(得分: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