在Formview中循环插入模板来获取控件Id没有返回任何结果

本文关键字:Id 控件 返回 结果 任何 获取 Formview 循环 插入 | 更新日期: 2023-09-27 18:12:18

我有一个带有一些文本框的formview。这些文本框的值需要在插入项时进行加密,然后保存到db表中。我一直在尝试下面的代码与各种变化没有任何运气。它不返回任何东西或以对象引用null消息结束。

    protected void formview1_iteminserting(object sender, FormViewInsertEventArgs e)
    {
 if (FormView1.CurrentMode == FormViewMode.Insert)
        {
        foreach (Control c in FormView1.Controls)
        {

            if (c is TextBox)
            {

                TextBox txtBox = (TextBox)c;                
                Response.Write(txtBox.ID);
            }
        } }

在Formview中循环插入模板来获取控件Id没有返回任何结果

在这种情况下,您可以使用循环来实现此目的:

如果你使用VS向导使用SqlDataSource填充FormView数据控件,那么你的文本框控件的ID将看起来像这样:[Name of Data Field] + TextBox

 //auto generated by VS Wizard
<asp:TextBox Text='<%# Bind("NameText") %>' ID="NameTextBox" />

但是如果你自己创建了它们,你仍然可以遵循这个规则来命名你的控件id。和这对我们的技巧很重要。

现在您可以简单地使用这段代码来获取所有文本框控件的值。

protected void FormView1_ItemInserting(object sender, FormViewInsertEventArgs e)
{            
    foreach (dynamic value in e.Values)
    {
        TextBox txtBox = FormView1.FindControl(value.Key + "TextBox") as TextBox;
        if (txtBox != null)
        {
            Response.Write(txtBox.ID);
        }
    }
}

注意如果没有找到控件,将不会有任何异常,因为它将由as操作符关键字为您自动处理;-)