无效的回发或回调参数。这段代码有什么问题?

时间:2013-03-14 09:53:44

标签: asp.net vb.net gridview

我有这个gridview,我不知道里面的按钮有什么问题。 我有这个asp代码:

<asp:GridView ID="gvList" runat="server">
            <Columns>
                <asp:TemplateField HeaderText="User Name" HeaderStyle-ForeColor="Black"  HeaderStyle-Font-Bold="true">
                    <ItemTemplate>
                        <asp:Label runat="server" ID="lblUsername" Text='<%# Eval("cUserName") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Dept User" HeaderStyle-ForeColor="Black"  HeaderStyle-Font-Bold="true">
                    <ItemTemplate>
                        <asp:Label runat="server" ID="lblDept" Text='<%#  iif(Eval("lDeptUser"),"Yes","No")  %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Actions" HeaderStyle-ForeColor="black" HeaderStyle-Font-Bold="true">
                    <ItemTemplate>
                        <asp:Button  ID="btnedit" runat="server" Text="Edit" />
                        <asp:Button ID="btnDelete" OnClick="DeleteRow" runat="server" Text="Delete" />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            </asp:GridView>

当我在任何一行按删除或编辑时,它给了我错误! Invalid postback or callback argument.

这是我在vb.net中的服务器端代码:

Public Function GetList() As DataTable
    Dim Query As String = "Select cUserName,lDeptUser FROM Intranet.dbo.Gn_ISCoordinators"
    Dim dt As DataTable = New DataTable()
    Using adapter = New SqlDataAdapter(Query, ConfigurationManager.ConnectionStrings("IntranetConnectionString").ConnectionString)
        adapter.Fill(dt)
        gvList.DataSource = dt
        gvList.DataBind()
        Return dt
    End Using

End Function

Public Function DelRow() As DataTable

    Dim strusername As String = CType(gvList.FindControl("lblUsername"), Label).Text.Trim()

    Dim Query As String = "Delete FROM Intranet.dbo.Gn_ISCoordinators where cUserName='" & strusername & "'"
    Dim dt As DataTable = New DataTable()
    Using Adapter = New SqlDataAdapter(Query, ConfigurationManager.ConnectionStrings("IntranetConnectionString").ConnectionString)
        Adapter.Fill(dt)
        Return dt
    End Using

End Function

Protected Sub DeleteRow(ByVal sender As Object, ByVal e As System.EventArgs)
    DelRow()
End Sub

Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    GetList()

End Sub

Protected Sub gv(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvList.RowDataBound
    e.Row.Cells(3).Visible = False
    e.Row.Cells(4).Visible = False


End Sub

End Class

我认为它来自客户端。请帮我解决这个问题。 顺便说一下,我到目前为止还没有使用任何ajaxtoolkit,页面中的EnableEventValidation="true"以及web.config

有什么问题及其解决方案,请帮助我。

提前感谢。

2 个答案:

答案 0 :(得分:1)

您无法使用此功能调用。因为

CType(gvList.FindControl("lblUsername"), Label).Text.Trim()

仅允许按钮点击事件。那么按钮点击事件本身内的功能代码也是如此。

答案 1 :(得分:1)

首先,我将代码包装在Page_Load

If Not IsPostBack Then GetList()

所以你只想在第一次加载时数据绑定网格,而不是在回发上。默认情况下,状态将通过ViewwState维护。

DeleteRow中的下一个问题,您正试图通过FindControl上的GridView找到标签。但NamingContainer的{​​{1}}是GridViewRow,因为GridView包含多行(和标签)而不只是一行。

所以你必须先得到对行的引用。只需使用NamingContainer的{​​{1}}:

即可
Button