我正在尝试为dropdownlist的indexchange事件中的hiddenfield赋值!实际上问题是当我试图更新我的记录时,我无法找到该隐藏字段的值!请给我解决方案或建议任何其他选择!谢谢!
我的网格视图是
<asp:TemplateField HeaderText="LocCode" SortExpression="LocCode">
<EditItemTemplate>
<ajax:UpdatePanel ID="upEditsLocation" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:DropDownList ID="ddlLocation" runat="server"
DataSourceID="sdsLocation"
OnDataBound="ddlLocation_DataBound"
DataValueField="LocCode" AppendDataBoundItems="false"
DataTextField="LocCode"
AutoPostBack="true"
onselectedindexchanged="ddlLocation_SelectedIndexChanged">
</asp:DropDownList>
<asp:SqlDataSource ID="sdsLocation" runat="server" ConnectionString="<%$ ConnectionStrings:ccConnString %>"
ProviderName="<%$ ConnectionStrings:CCConnString.ProviderName %>" SelectCommand="Select LocCode from Location">
</asp:SqlDataSource>
</ContentTemplate>
</ajax:UpdatePanel>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblLocation" runat="server" Text='<%# Bind("LocCode") %>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateField>
我的indexchange事件是
protected void ddlLocation_SelectedIndexChanged(object sender, EventArgs e)
{
hdloc.Value = ddlLocation.SelectedItem.Text;
}
我隐藏的领域是
<asp:HiddenField ID="hdloc" runat="server" />
答案 0 :(得分:0)
从代码我可以看到HiddenField
不是更新面板的一部分。因此,如果您为其分配任何值,它将不会反映在客户端计算机上。增加面板的范围以包含隐藏字段,然后尝试。
或者您可以尝试来自ASP.net论坛的this解决方案
Here is a small tutorial on update panel (MSDN)
希望这会对你有所帮助。
答案 1 :(得分:0)
GridViewRow cancel = (GridViewRow)GridView1.Rows[e.RowIndex];
Label lbldeleteID = (Label)cancel.FindControl("lblid");
答案 2 :(得分:0)
如果你无法从后面的代码访问hdloc,那么Visual Studio就不会在aspx.designer.cs上添加任何内容(尝试删除它并将其添加回来或更改id然后再返回原始值)或隐藏字段放在另一个绑定控件的其他模板中,这意味着你需要使用ctrl.FindControl(“hdloc”)然后转换为HiddenField。
此外,您需要将此隐藏字段放入UpdatePanel,并使用UpdateMode =“Always”。
protected void ddlLocation_SelectedIndexChanged(object sender, EventArgs e)
{
hdloc.Value = (sender as DropDownList).SelectedItem.Text;
}
我确定ddlLocation.SelectedItem.Text,就像你使用它一样,它会产生编译错误,因为ddlLocation在后面的代码上是不可见的,因为它在EditItemTemplate里面。