Aspx Web 表单命令参数
我有一份记录列表。每条记录都有唯一的 ID 和文本。当我在页面上单击它时,每条记录都有一个按钮,它引用方法
DeleteRecord(object sender, EventArgs e)
。但这个按钮不知道记录的 ID。我尝试在 CommandArgument 上推送 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。
请原谅我的英语不好。
您不能在服务器控件中使用内联脚本,即:
<asp:Button CommandName="Delete" CommandArgument="<%#Eval("record.Id")%>" />
这是错误的,因为您试图在服务器控件的属性中使用服务器代码。
除此之外,您还必须手动构建按钮(作为 HTML 控件,而不是服务器控件),或者必须使用 Repeater 而不是 foreach,并在 repeater 的 ItemDataBound 事件处理程序中分配 CommandArgument。
您可能应该绑定到
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
事件,因为对于每个这样的控制这些表达式生成事件处理程序。这是因为
<%# %>
语法。
<%
foreach (DAL.Record record in records)
{
<b><% Response.Write(record.Text);%></b>
<asp:Button CommandArgument=**'**<%#Eval("record.Id")%>**'** runat="server" OnClick="DeleteRecord" />
}
%>