【问题标题】:Aspx Web Forms Command argumentAspx Web 窗体命令参数
【发布时间】:2013-11-27 13:41:52
【问题描述】:

我有一个记录列表。每条记录都有唯一的 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="&lt;%#Eval("record.Id")%&gt;",或者我的 DNA。 原谅我英语不好。

【问题讨论】:

  • CommandArgument='' . 单引号。这行得通吗?
  • 不,这不起作用。

标签: c# asp.net button


【解决方案1】:

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

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

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

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

【讨论】:

【解决方案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 事件,因为对于每个这样的控件,都会从这些表达式生成一个事件处理程序。这是因为&lt;%# %&gt; 语法。

【讨论】:

  • 无论我使用 OnCommand 还是 OnClick 都没有关系,因为我没有正确填写 CommandArgument。在 msdn 上,所有的 CommandName"s" 和 CommandArgument"s" 都充满了魔术字符串,程序员已经提前知道了。无论如何,感谢您尝试帮助我。
  • 我已经编辑了我的答案。确保您真的检查 DataBinding 是否已触发
【解决方案3】:
<%
foreach (DAL.Record record in records) 
{
    <b><% Response.Write(record.Text);%></b>
    <asp:Button CommandArgument=**'**<%#Eval("record.Id")%>**'** runat="server" OnClick="DeleteRecord" />
}
%>

【讨论】:

    猜你喜欢
    • 2013-11-26
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多