ASP.NET中点击按钮获取Gidview隐藏字段的值

3

我有一个名为dtAppend的网格视图。当我按下删除按钮时,我希望所选行记录从用户表中删除。

我首先在网格视图中使用了button field,如下:

<asp:ButtonField Text="Delete" CommandName="DeleteRow" ControlStyle-CssClass="btn btn-danger btn-small" ControlStyle-ForeColor="White" />
<asp:TemplateField visible="false" ItemStyle-Width="0px">
    <ItemTemplate>
        <asp:HiddenField ID="HiddenField" Visible="false" runat="server" Value='<%# Eval("userId") %>' />
    </ItemTemplate>
</asp:TemplateField>

我的客户要求显示JavaScript警告,点击“是”后记录应该被删除。我不能为按钮字段编写onClientClick,所以我被迫使用普通的Asp按钮。

在gridview的rowCommand事件中,我正在使用以下代码获取隐藏字段的值:

if (e.CommandName == "DeleteRow")
{
    GridViewRow row = dtAppend.Rows[Convert.ToInt32(e.CommandArgument)];
    hidden1 = (HiddenField)row.Cells[6].FindControl("HiddenField");
    string text = Convert.ToString((HiddenField)row.Cells[6].FindControl("HiddenField"));
    Session["dtIdDel"] = hidden1.Value;
}

我已经将值存储在Session中,但我需要让上述代码在Button_Click事件中起作用。
 protected void deleteButton_Click(object sender, EventArgs e)
    {
        GridViewRow row = dtAppend.Rows[Convert.ToInt32(e.CommandArgument)];
        hidden1 = (HiddenField)row.Cells[6].FindControl("HiddenField");
        string text = Convert.ToString((HiddenField)row.Cells[6].FindControl("HiddenField"));
        Session["dtIdDel"] = hidden1.Value;}

这是 'e.CommandArgument' 报错的地方。

我不能在普通按钮点击事件中使用上述代码,因为在 e.CommandArgument 中会报错。

有什么帮助吗?


以下文章似乎对您有所帮助: http://stackoverflow.com/questions/17920125/get-confirm-box-value-via-code-behind-at-c-sharp - Digvijay Verma
4个回答

2
你最好删除 Visible="false"。因为如果有Visible="false",则隐藏字段需要绑定的值将无法绑定到该字段。不管怎样,它是一个隐藏字段,所以将其设置为Visible="true"
编辑:
你如何处理网格的RowDataBound事件?你是否为每一行分配了CommandArgument?否则,在分页中上述概念将无法工作。请参考以下示例:
例如:-
Button btnMail = (Button)e.Row.FindControl("lnkMail");
btnMail.CommandArgument = e.Row.RowIndex.ToString();

我更新了问题,我在gridView_RowCommand中获取隐藏字段的值并将其存储在会话中,但我需要在Click事件中获取它。 - Siddharth Koya

2

你可以简单地删除visible="false"

<asp:HiddenField ID="HiddenField" runat="server" Value='<%# Eval("userId") %>' />

抱歉,我的错误。我正在将值存储在 Session["dtIdDel"] = hidden1.Value 中。 - Siddharth Koya

1
你可以将ID作为命令参数直接发送。
或者尝试以下代码:
var ID = int.Parse(((HiddenField)item.FindControl("HiddenField1")).Value);
sql = "delete from tablename where id=" + ID;

恰好是我想要的,非常感谢伙计...非常感激 :) - Siddharth Koya

1
我认为这将是一种简单的方法,而不是使用隐藏字段。
<asp:LinkButton CommandArgument='<%# Eval("userId") %>' OnClientClick="if (!confirm('Are you sure you want delete?')) return false;" CommandName="DeleteRow" ID="eliminar" runat="server" Text="delete"/>

if (e.CommandName == "DeleteRow")
{
    int userId = Int32.Parse(e.CommandArgument.ToString());
}

恰好是我想要的,非常感谢你啊伙计...真的很感激 :) - Siddharth Koya
我很高兴它能够帮助到你。 - Ashwini Verma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接