【问题标题】:Accessing button in repeater control中继器控制中的访问按钮
【发布时间】:2012-12-21 20:31:52
【问题描述】:

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

标记: 中继器:

   <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 很陌生。

【问题讨论】:

  • 在movies_ItemCommand 事件处理程序中使用变量movie_title 时不会出现语法错误吗?
  • 我做了 Manish。我现在已经在 page_load 之外声明了它,但仍然收到上面的错误。
  • 能否请您发布您的中继器控制 aspx 部分和“//其他东西”代码?
  • 嗨 Manish,我刚刚更新了帖子以包含所有代码

标签: asp.net vb.net


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    相关资源
    最近更新 更多