[英]How to obtain the value of HiddenField in a GridView when a CheckBox is checked?
[英]Unable to find checkbox by ID in a GridView based on HiddenField value
我在ASP.NET中有一个GridView,在此GridView的一栏中,我具有以下控件:
<asp:TemplateField>
<ItemTemplate>
<input id='<%#Eval("po_asn_number") %>' class="css-checkbox" type="checkbox" />
<label for='<%#Eval("po_asn_number") %>' name="lbl_1" class="css-label"></label>
<asp:HiddenField ID="poid" runat="server" Value='<%#Eval("po_asn_number") %>' />
</ItemTemplate>
</asp:TemplateField>
这是我在后面的代码中的OnClick事件。
protected void create_Click(object sender, EventArgs e)
{
foreach (GridViewRow gvr in GridView1.Rows)
{
HiddenField poid = ((HiddenField)gvr.Cells[0].FindControl("poid"));
if (((HtmlInputCheckBox)gvr.FindControl(poid.Value)).Checked == true)
{
Response.Redirect("ShipmentDetail.aspx?id=" + poid.Value);
}
else
{
//Do nothing
}
}
}
首先,我要寻找一个HiddenField,其值是<input type="checkbox" />
的ID。 然后,我正在检查是否已checkbox
该checkbox
。 如果是这样,则执行其他操作。
单击按钮时出现错误:
Object reference not set to an instance of an object
Line 48: if (((HtmlInputCheckBox)gvr.FindControl(checkbox)).Checked == true)
Line 49: {
Line 50: Response.Redirect("ShipmentDetail.aspx?id=" + poid.Value);
您可以提供的任何帮助将不胜感激。
添加runat
属性。
<input id='<%#Eval("po_asn_number") %>' class="css-checkbox" type="checkbox" runat="server"/>
如果没有此属性,则无法在服务器端代码后面的代码中找到该控件。
还要在获取“ Hidden field
值的地方放置一个断点,以确认您正在获取期望值。
您还需要实施Karl建议的更改以使其起作用。
新增内容:更改此行以为以下行添加Cells [0]:
if (((HtmlInputCheckBox)gvr.Cells[0].FindControl(poid.Value)).Checked == true)
当您遍历所有网格视图行时,只需要查看数据行,因为当您不只指定数据行时,它从标题行开始。 您正在获取异常,因为它无法将FindControl()
的结果FindControl()
转换为类型。 由于标题行中没有使用此名称的控件,因此FindControl()
返回null
并强制转换。
而是这样做:
protected void create_Click(object sender, EventArgs e)
{
foreach (GridViewRow gvr in GridView1.Rows)
{
// Only deal with data rows, not header or footer rows, etc.
if (gvr.RowType == DataControlRowType.DataRow)
{
HiddenField poid = ((HiddenField)gvr.FindControl("poid"));
// Check if hidden field was found or not
if(poid != null)
{
if (((HtmlInputCheckBox)gvr.FindControl(poid.Value)).Checked)
{
Response.Redirect("ShipmentDetail.aspx?id=" + poid.Value);
}
else
{
//Do nothing
}
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.