1

好的,我需要更改网格视图中隐藏字段的值,这是我目前所拥有的:

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";
    }
}

谁能告诉我我做错了什么?谢谢你!

4

4 回答 4

1

我让它工作了。上面的循环工作正常,但显然我的 sdi 值并不总是正确设置,因此我检查的值总是设置为 false。因此,如果有人再次遇到此问题,上述方法在我的情况下非常有效。

于 2008-12-05T20:17:12.370 回答
0

编辑:发布前检查的经典案例。显然设置 hidden=true 实际上可以防止数据绑定,这就是 JS 出现问题的原因。会说这是 ASP.NET 的典型问题之一,这让我诅咒它的名字,但可能只是选择使用许多 googleable 解决方案之一来调整控件。

关于在 ASP.NET 中使用元素 ID 的评论保持不变,因为它是邪恶的。


没有更多代码很难知道(什么时候准确执行?是否有其他东西覆盖它?标记是什么样的?)但我现在可以说通过它的 ASP.NET 变形 ID 引用一个元素是一个坏主意(TM )。

如果可以的话,我建议您尝试在为您处理引用的代码隐藏中修改它,或者至少在其中写出可以使用 clientID 的 JS。如果失败了,我会尝试通过扩展的元素搜索器找到元素——你自己的或库工具,如 jquery 等人的“$”函数——这将允许你使用健壮的 CSS 或 Xpath 参数。

于 2008-12-05T15:49:10.553 回答
0

只有当 childNode id 是(截断的)lbl_SDI 时,您的第一条语句才成立。仅当第一个语句为真(通过 sdiFound)并且 ID 为(截断)lbl_Updated 时,您的第二个语句才为真。

所以第二个陈述永远不可能是真的。只有当节点 ID不是lbl_Updated时,变量 sdiFound 才会为真。

我认为很多人可能不同意您也专门引用 .NET ID。您是否考虑过使用:

<%= lbl_SDI.ClientID %>

在你的 JavaScript 中?

于 2008-12-05T15:50:46.870 回答
0

好吧,你能告诉我发生了什么吗?似乎您忘记将 sdiFound 变量重置为 false,或者在找到它时中断循环。

至于你的问题:

如果您将隐藏的 html 输入作为服务器控件运行,那么它将由 GridView 显示,并且它将具有唯一的 ID。然后您可以使用 getElementById 找到它。您可以将其放入为您构建正确 id 的循环中,您应该能够找到您的控件。

于 2008-12-05T15:52:25.820 回答