Asp.net 回发或回调参数无效。这个代码有什么问题?

Asp.net 回发或回调参数无效。这个代码有什么问题?,asp.net,vb.net,gridview,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">

我有这个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>
我认为这是来自客户方面。请帮我解决这个问题。 顺便说一句,到目前为止,我还没有使用任何ajaxtoolkit和页面中的
EnableEventValidation=“true”
以及web.config

有什么问题和解决办法,请帮助我


提前感谢。

您不能使用此函数调用。因为

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

仅允许在按钮单击事件上使用。按钮点击事件本身中的功能代码也是如此。

首先,我将代码包装在加载页面中:

If Not IsPostBack Then GetList()
因此,您只需要在第一次加载时对网格进行数据绑定,而不是在回发时。默认情况下,它的状态将通过
ViewwState
进行维护

DeleteRow
中的下一个问题是,您试图通过
GridView
上的
FindControl
查找标签。但是它的
NamingContainer
GridView行
,因为
GridView
包含多行(和标签),而不仅仅是一行

因此,您必须首先获得对该行的引用。只需使用
按钮的
NamingContainer

Dim btn = DirectCast(sender, Button)
Dim row = DirectCast(btn.NamingContainer, GridViewRow)
Dim lblUsername = DirectCast(row.FindControl("lblUsername"), Label)
' ... '

首先,我会将Page_Load中的代码包装在
中,如果不是IsPostBack,则使用GetList()
。它可以工作!但是,当我按下delete按钮时,它会给我
对象引用,而不是设置为对象的实例。
Dim StrusterName上设置为String=CType(gvList.FindControl(“lblUsername”),Label).Text.Trim()
行。您不需要在RowCommand事件中处理此问题,并检查CommandName=delete。然后执行删除并在其中重新绑定它。如果Page.Ispostback=false,那么还应该在回发检查中设置初始绑定
Dim btn = DirectCast(sender, Button)
Dim row = DirectCast(btn.NamingContainer, GridViewRow)
Dim lblUsername = DirectCast(row.FindControl("lblUsername"), Label)
' ... '