【问题标题】:How to change the value of a Hidden Field in a Gridview using Javascript?如何使用 Javascript 更改 Gridview 中隐藏字段的值?
【发布时间】:2010-09-25 13:08:49
【问题描述】:
好的,我需要更改网格视图中隐藏字段的值,这是我目前所拥有的:
for(var i = 0; i < gv_Proofs.rows.length; i++)
{
var tbl_Cell = gv_Proofs.rows[i].cells[0];
var sdiFound = false;
for(var x = 0; x < tbl_Cell.childNodes.length; x++)
{
if(tbl_Cell.childNodes[x].id == "_ctl0_MasterContentPlaceHolder_gv_Proofs__ctl2_lbl_SDI")
{
if(tbl_Cell.childNodes[x].innerHTML == sdi)
sdiFound = true;
}
if(tbl_Cell.childNodes[x].id == "_ctl0_MasterContentPlaceHolder_gv_Proofs__ctl2_lbl_Updated" && sdiFound)
tbl_Cell.childNodes[x].value = "true";
}
}
谁能告诉我我做错了什么?谢谢!
【问题讨论】:
标签:
c#
javascript
gridview
hidden-field
【解决方案1】:
我让它工作了。上面的循环工作正常,但显然我的 sdi 值并不总是正确设置,因此我检查的值总是设置为 false。因此,如果有人再次遇到此问题,上述方法在我的情况下非常有效。
【解决方案2】:
只有当 childNode id 是(截断的)lbl_SDI 时,您的第一个语句才是正确的。
仅当第一个语句为真(通过 sdiFound)并且 ID 为(截断)lbl_Updated 时,您的第二个语句才为真。
所以第二个陈述永远不可能是真的。变量 sdiFound 仅在节点 ID 不是 lbl_Updated 时为真。
我认为很多人可能不同意您也专门引用 .NET ID。您是否考虑过使用:
<%= lbl_SDI.ClientID %>
在你的 javascript 中?
【解决方案3】:
嗯,你能告诉我发生了什么吗?似乎您忘记将 sdiFound 变量重置为 false,或者在找到它时中断循环。
就你的问题而言:
如果您将隐藏的 html 输入作为服务器控件运行,那么它将由 GridView 显示,并且将具有唯一的 id。然后您可以使用 getElementById 找到它。您可以将其放入为您构建正确 id 的循环中,您应该能够找到您的控件。
【解决方案4】:
编辑:发帖前检查的经典案例。 Apparently 设置 hidden=true 实际上可以防止数据绑定,这就是 JS 出现问题的原因。 我会说这是 ASP.NET 的典型问题之一,这让我诅咒它的名字,但 你 可能只是选择使用其中一种来调整控件googleable 解决方案。
关于在 ASP.NET 中使用元素 ID 的评论保持不变,因为它是邪恶的。
如果没有更多代码很难知道(什么时候准确执行?是否有其他东西覆盖它?标记是什么样的?)但我现在可以说,通过它的 ASP.NET 变形 ID 引用一个元素是不好的创意(TM)。
如果可以的话,我建议您尝试在为您处理引用的代码隐藏中修改它,或者至少在其中写出您可以使用 clientID 的 JS。如果失败了,我会尝试通过扩展的元素搜索器(您自己的或库工具(如 jquery 等人的“$”函数))找到元素,这将允许您使用健壮的 CSS 或 Xpath 参数。