Asp.net 回发或回调参数无效。这个代码有什么问题?
我有这个gridview,我不知道里面的按钮有什么问题。 我有以下asp代码: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">
<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)
' ... '