开发者问题收集

Aspx Web 表单命令参数

2013-11-27
5371

我有一份记录列表。每条记录都有唯一的 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。 请原谅我的英语不好。

3个回答

您不能在服务器控件中使用内联脚本,即:

<asp:Button CommandName="Delete" CommandArgument="<%#Eval("record.Id")%>" />

这是错误的,因为您试图在服务器控件的属性中使用服务器代码。

除此之外,您还必须手动构建按钮(作为 HTML 控件,而不是服务器控件),或者必须使用 Repeater 而不是 foreach,并在 repeater 的 ItemDataBound 事件处理程序中分配 CommandArgument。

Luaan
2013-11-27

您可能应该绑定到 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 事件,因为对于每个这样的控制这些表达式生成事件处理程序。这是因为 <%# %> 语法。

Dethariel
2013-11-27
<%
foreach (DAL.Record record in records) 
{
    <b><% Response.Write(record.Text);%></b>
    <asp:Button CommandArgument=**'**<%#Eval("record.Id")%>**'** runat="server" OnClick="DeleteRecord" />
}
%>
Hisham
2014-10-02