每当我单击其中一个删除链接按钮时,e.CommandArgument始终保留值“”。我正在读某个你不能在命令参数中使用<%#的地方,但我看到了几个例子,这是有效的。有什么建议?
在ASPX中
<asp:DataList ID="DataList1" runat="server" DataSourceID="SqlDataSource1">
<ItemTemplate>
<asp:Label ID="dataLabel" runat="server" Text='<%# Eval("data") %>' />
<br />
<asp:Label ID="nameLabel" runat="server" Text='<%# Eval("name") %>' />
|
<asp:Label ID="Column1Label" runat="server" Text='<%# Eval("Column1") %>' />
<br />
<asp:LoginView ID="HeadLoginView" runat="server" EnableViewState="false">
<LoggedInTemplate>
<asp:LinkButton CLASS="DeleteButton" runat="server" OnCommand="Delete" CommandArgument='<%# Eval("id") %>' ViewStateMode="Disabled">Delete</asp:LinkButton>
</LoggedInTemplate>
</asp:LoginView>
</ItemTemplate>
</asp:DataList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:ApplicationServices %>"
SelectCommand="SELECT [id],[name], [data], convert(varchar, [date], 101) FROM [Announcements] ORDER BY [date] DESC">
</asp:SqlDataSource>
在ASPX.CS
using (SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString))
{
SqlCommand command = conn.CreateCommand();
command.CommandText = "DELETE FROM Annoucnements WHERE id=@id";
command.CommandType = System.Data.CommandType.Text;
command.Parameters.Add(new SqlParameter("id", e.CommandArgument));
conn.Open();
command.ExecuteNonQuery();
}
正如Royi Namir所建议的那样,将EnableViewState更改为true可以解决问题。
答案 0 :(得分:1)
稍微查了一下后,我发现一些帖子说你不能在服务器标签中使用<%# ... %>
语法,这显然是错误的,因为你在{{1}使用它我确定以前我做过同样的事情。无论如何,您可以使用Text
上的ItemDataBound
事件:
DataList
注意我已将 <asp:DataList ID="DataList1" runat="server" DataSourceID="SqlDataSource1" OnItemDataBound="DataList1_ItemDataBound">
<ItemTemplate>
<asp:Label ID="dataLabel" runat="server" Text='<%# Eval("data") %>' />
<br />
<asp:Label ID="nameLabel" runat="server" Text='<%# Eval("name") %>' />
|
<asp:Label ID="Column1Label" runat="server" Text='<%# Eval("Column1") %>' />
<br />
<asp:LoginView ID="HeadLoginView" runat="server" EnableViewState="false">
<LoggedInTemplate>
<asp:LinkButton CssClass="DeleteButton" runat="server" ID="lbDelete" OnCommand="Delete" CommandArgument='<%# Eval("id") %>' ViewStateMode="Disabled">Delete</asp:LinkButton>
</LoggedInTemplate>
</asp:LoginView>
</ItemTemplate>
</asp:DataList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:ApplicationServices %>"
SelectCommand="SELECT [id],[name], [data], convert(varchar, [date], 101) FROM [Announcements] ORDER BY [date] DESC">
</asp:SqlDataSource>
添加到您的ID="lbDelete"
(并且还为您更改了LinkButton
到CLASS
),这是在我们的代码中找到控件所需的:
CssClass
答案 1 :(得分:0)
您只需要DataKeyField来唯一标识您的行,以便执行删除操作。