我有一份记录清单。每条记录都有唯一的ID和文本。当我在页面上吹它时,每个记录都有一个按钮,参考方法DeleteRecord(object sender, EventArgs e)
。但是这个按钮不知道记录的id。我尝试在CommandArgument上使用push id,但它不起作用。
当我填写CommandArgument时,是否有另一种方法可以解决这个问题,或者我只是犯了错误?
Profile.aspx :
<%
foreach (DAL.Record record in records)
{
<b><% Response.Write(record.Text);%></b>
<asp:Button CommandArgument="<%#Eval("record.Id")%>" runat="server" OnClick="DeleteRecord" />
}
%>
当我在方法
中的 Profile.cs 上暂停我的程序时protected void DeleteRecord(object sender, EventArgs e)
(Button)sender.CommandArgument
Always == "";
问题在于
CommandArgument="<%#Eval("record.Id")%>"
,或我的DNA。
原谅我的英语很差。
答案 0 :(得分:4)
您不能在服务器控件中使用内联脚本,即:
<asp:Button CommandName="Delete" CommandArgument="<%#Eval("record.Id")%>" />
错误,因为您尝试在服务器控件的属性中使用服务器代码。
而不是这样,您必须手动构建按钮(作为HTML控件,而不是服务器控件),或者必须使用Repeater而不是foreach,并在转发器的ItemDataBound事件处理程序中分配CommandArgument。 / p>
答案 1 :(得分:2)
您可能应该绑定到OnCommand
事件。它将为您提供具有您财产的CommandEventArgs e
。
有关详细信息,请参阅http://msdn.microsoft.com/en-US/library/system.web.ui.webcontrols.button.oncommand(v=vs.110).aspx。
编辑:
以下是一个例子:
private void DeleteRecord(Object sender, CommandEventArgs e)
{
var recordId = (string)e.CommandArgument;
DatabaseModel.Delete(recordId);
}
在aspx页面中:
<%
foreach (DAL.Record record in records)
{
<b><% Response.Write(record.Text);%></b>
<asp:Button CommandName="Delete" CommandArgument="<%#Eval("record.Id")%>" runat="server" OnCommand="DeleteRecord" />
}
%>
如果这没有帮助,请确保为包含数据绑定表达式的控件触发DataBinding
事件,因为对于每个这样的控件,都会生成这些表达式的事件处理程序。这是因为<%# %>
语法。
答案 2 :(得分:-1)
<%
foreach (DAL.Record record in records)
{
<b><% Response.Write(record.Text);%></b>
<asp:Button CommandArgument=**'**<%#Eval("record.Id")%>**'** runat="server" OnClick="DeleteRecord" />
}
%>