Aspx Web Forms Command参数

时间:2013-11-27 13:41:52

标签: c# asp.net button

我有一份记录清单。每条记录都有唯一的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。 原谅我的英语很差。

3 个答案:

答案 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" />
}
%>