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

最初のステートメントは、childNode IDが(切り捨てられた)lbl_SDIである場合にのみ真になります。2番目のステートメントは、最初のステートメントが(sdiFoundを介して)真であり、IDが(切り捨てられた)lbl_Updatedである場合にのみ真になります。

したがって、2番目のステートメントが真になる方法はありません。変数sdiFoundは、ノードIDがlbl_Updatedでない場合にのみtrueになります。

.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 に答える
0

編集:投稿する前のチェックの古典的なケース。どうやらhidden=true を設定すると、実際にはデータバインディングが妨げられ、JS に問題が発生する原因になります。これは、ASP.NET の典型的な問題の 1 つであり、その名前そのものを呪いますが、多くのグーグル対応ソリューションの 1 つを使用してコントロールを適応させることを選択することもできます

ASP.NET で要素 ID を使用することに関するコメントは、それが悪であるため、そのまま残されました。


コードを追加せずに知るのは難しい (これが正確に実行されるのはいつですか? 他の何かがそれを上書きしているのでしょうか? マークアップはどのように見えますか?) しかし、ASP.NET 変形 ID で要素を参照することは悪い考え(TM) であると今は言えます。 )。

可能であれば、参照が処理されるコードビハインドでこれを変更するか、少なくとも clientID を使用できる場所に JS を書き出すことをお勧めします。拡張要素ハンター (独自の、または jquery などの "$" 関数などのライブラリ ユーティリティ) を使用して要素を見つけようとして失敗すると、代わりに堅牢な CSS または Xpath 引数を使用できるようになります。

于 2008-12-05T15:49:10.553 に答える