来自 'asp:Repeater' 的无法识别的字段错误
Unrecognized field errors originating from within an 'asp:Repeater'
我有一个包含多个表单域的预览页面。以下只是其中的几个:
<asp:Repeater ID="rptpreview" runat="server">
<ItemTemplate>
<table style="width: 100%; border: 1px solid black;">
<tr>
<td style="width: 33.3%; border-collapse: collapse; white-space: nowrap;">
Airport where aircraft primary home based city:
<asp:Label ID="lblAircraftCity" Text='<%#Eval("aircity") %>'
Style="width: 270px; color: #0093B2; font-weight: bold;"
runat="server"></asp:Label>
</td>
</tr>
</Table>
</ItemTemplate>
</asp:Repeater>
我想做的是从代码隐藏文件向这些表单字段传递值,以便用户能够在提交前查看他们的条目。这是代码隐藏文件中的一小部分数据示例:
int rowIndex = 0;
if (ViewState["CurrentTable"] != null)
{
//Initialize datatable.
DataTable ctable = ViewState["CurrentTable"] as DataTable;
DataTable preview = ctable.Clone();
int rowNumber = 1;
//Lets start looping through the second datatable for aircraft schedule info. .
if (ctable.Rows.Count > 0)
{
for (int i = 1; i <= Repeater2.Items.Count; i++)
{
DataRow dr = preview.NewRow();
lblAircraftCity.Text =
((TextBox)Repeater2.Items[rowIndex].FindControl("aircraftCity")).Text;
lblAircraftcnty.Text =
((TextBox)Repeater2.Items[rowIndex].FindControl("aircraftcnty")).Text;
preview.Rows.Add(dr);
rowNumber++;
rowIndex++;
}
rptpreview.DataSource = preview;
rptpreview.DataBind();
}
}
此代码抛出错误,表明某些字段无法识别。有人可以帮忙吗?
您在 Repeater 中有一个 Label 并将其转换为 TextBox,这会引发无法识别的字段错误。将其投射到标签:
DataRow dr = preview.NewRow();
dr["aircity"] = ((Label)Repeater2.Items[rowIndex].FindControl("aircraftCity")).Text;
dr["aircnty"] = ((Label)Repeater2.Items[rowIndex].FindControl("aircraftcnty")).Text;
这将解决您的问题,因为 lblAircraftCity.Text
和 lblAircraftCnty.Text
无法访问 Repeater 外部,因此您必须分别使用 dr["aircity"]
和 dr["aircnty"]
。
我有一个包含多个表单域的预览页面。以下只是其中的几个:
<asp:Repeater ID="rptpreview" runat="server">
<ItemTemplate>
<table style="width: 100%; border: 1px solid black;">
<tr>
<td style="width: 33.3%; border-collapse: collapse; white-space: nowrap;">
Airport where aircraft primary home based city:
<asp:Label ID="lblAircraftCity" Text='<%#Eval("aircity") %>'
Style="width: 270px; color: #0093B2; font-weight: bold;"
runat="server"></asp:Label>
</td>
</tr>
</Table>
</ItemTemplate>
</asp:Repeater>
我想做的是从代码隐藏文件向这些表单字段传递值,以便用户能够在提交前查看他们的条目。这是代码隐藏文件中的一小部分数据示例:
int rowIndex = 0;
if (ViewState["CurrentTable"] != null)
{
//Initialize datatable.
DataTable ctable = ViewState["CurrentTable"] as DataTable;
DataTable preview = ctable.Clone();
int rowNumber = 1;
//Lets start looping through the second datatable for aircraft schedule info. .
if (ctable.Rows.Count > 0)
{
for (int i = 1; i <= Repeater2.Items.Count; i++)
{
DataRow dr = preview.NewRow();
lblAircraftCity.Text =
((TextBox)Repeater2.Items[rowIndex].FindControl("aircraftCity")).Text;
lblAircraftcnty.Text =
((TextBox)Repeater2.Items[rowIndex].FindControl("aircraftcnty")).Text;
preview.Rows.Add(dr);
rowNumber++;
rowIndex++;
}
rptpreview.DataSource = preview;
rptpreview.DataBind();
}
}
此代码抛出错误,表明某些字段无法识别。有人可以帮忙吗?
您在 Repeater 中有一个 Label 并将其转换为 TextBox,这会引发无法识别的字段错误。将其投射到标签:
DataRow dr = preview.NewRow();
dr["aircity"] = ((Label)Repeater2.Items[rowIndex].FindControl("aircraftCity")).Text;
dr["aircnty"] = ((Label)Repeater2.Items[rowIndex].FindControl("aircraftcnty")).Text;
这将解决您的问题,因为 lblAircraftCity.Text
和 lblAircraftCnty.Text
无法访问 Repeater 外部,因此您必须分别使用 dr["aircity"]
和 dr["aircnty"]
。