【问题标题】:Problem Binding to GridView HiddenField绑定到 GridView HiddenField 的问题
【发布时间】:2011-06-03 16:07:51
【问题描述】:

编辑:我在指出的第一个回复中添加了 hf。这有助于解决其他一些问题,但仍未解决问题。

我正在尝试将列表绑定到具有大量隐藏字段的网格视图(我将仅使用 50 个中的 2 个)用于临时保存,以便用户可以创建和删除多个项目而无需来回访问数据库在创建过程中多次。我可以绑定到 BoundFields 并从中调用;但是,当我尝试调用隐藏字段值时,它会返回为 null。我可能在绑定到隐藏字段时遇到问题。这是我的代码

平均售价:

<asp:GridView ID="grdOtherCarrier" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:BoundField HeaderText="Sequence" DataField="Sequence"></asp:BoundField>
<asp:BoundField HeaderText="Pay ID" DataField="PayID"></asp:BoundField>
<asp:BoundField HeaderText="Provider" DataField="Provider"></asp:BoundField>
            <asp:TemplateField HeaderText="Actions">
                <ItemTemplate>  
                    <asp:HiddenField ID="hfInsuredLastName" Value="<%#Eval("InsuredLastName")%>" runat="server" />
                    <asp:HiddenField ID="hfInsuredFirstName" Value="<%#Eval("InsuredFirstName")%>" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>

C#/后面的代码:

    protected void lblSubmitOtherCarrier_Click(object sender, EventArgs e)
    {
        List<OtherCarrier> OCList = new List<OtherCarrier>();

        OtherCarrier OC;

 foreach (GridViewRow row in grdOtherCarrier.Rows)
        {
            if (row.RowType == DataControlRowType.DataRow)
            {
                OC = new OtherCarrier();
                String Sequence = row.Cells[0].Text.ToString() ; // primary value
                String PayID = row.Cells[1].Text.ToString(); // primary value
                String Provider = row.Cells[2].Text.ToString();    // primary value

                HiddenField InsuredLastName = (HiddenField)row.FindControl("hfInsuredLastName");
                HiddenField InsuredFirstName = (HiddenField)row.FindControl("hfInsuredFirstName");

                OC.Sequence = Sequence;
                OC.PayID = PayID;
                OC.Provider = Provider;
                OC.InsuredLastname = InsuredLastName.Value.ToString();
                OC.InsuredFirstName = InsuredFirstName.Value.ToString();

                OCList.Add(OC);
            }
        }
        OC = new OtherCarrier();

        OC.Sequence = txtSequence.Text;
        OC.PayID = txtPayID.Text;
        OC.Provider = txtProvider.Text;
        OC.InsuredLastname = txtInsuredLastname.Text;
        OC.InsuredFirstName = txtInsuredFirstName.Text;
        OCList.Add(OC);

        TD.OtherCarrierList = OCList;

        grdOtherCarrier.DataSource = OCList;
        grdOtherCarrier.DataBind();

        mpeAddOtherCarrier.Hide();
        txtSequenceNo.Text = (grdOtherCarrier.Rows.Count + 1).ToString();
     }

当从隐藏字段分配 OC.InsuredLastname 时,隐藏字段将显示为空值。要么我没有正确阅读,要么没有正确书写。

【问题讨论】:

  • 您是否在客户端填写隐藏字段值?

标签: list gridview data-binding hiddenfield


【解决方案1】:

所以...

你试图找到一个控件

(HiddenField)row.FindControl("InsuredLastName");

如您所见,当您在 HTML 中明确说明您的控件名称为时,命名为 InsuredLastName

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

命名为hfInsuredLastName

您需要做的就是将调用更改为

(HiddenField)row.FindControl("hfInsuredLastName")

【讨论】:

  • 我将 hf 添加到字段中,并通过将 ID 从 HTML 复制并粘贴到后面的代码中来确认它们的名称正确,但仍然遇到同样的问题。我将更新上面的代码以显示此修复。
猜你喜欢
  • 1970-01-01
  • 2013-11-02
  • 2016-03-12
  • 1970-01-01
  • 1970-01-01
  • 2013-12-27
  • 2013-10-11
  • 1970-01-01
相关资源
最近更新 更多