0

asp.netでWebサイトを開発しています。RadioButton で編集した GridView を使用しました。これは GridView のコードです。この RadioButton とともに、GridView は DataBase のテーブルから値を取得しており、3 つの列が含まれています。

<asp:GridView ID="creditGridView" runat="server"  Width="500" Height="210px"  GridLines="None" CssClass="classGridView" >
                   <Columns>
                       <asp:TemplateField HeaderText="Pick One">
                           <ItemTemplate>
                               <asp:RadioButton ID="radBatId" runat="server" onclick= "javascript:CheckOtherIsCheckedByGVID(this);" />
                           </ItemTemplate>
                       </asp:TemplateField>
                   </Columns>
</asp:GridView>

そして、JavaScript を使用して機能を作成し、GridView で一度に 1 つの RadioButton を選択しました。これは JavaScript コードです。

function CheckOtherIsCheckedByGVID(rdBtn) {
        var currentRdBtnId = rdBtn.id;
        alert(currentRdBtnId);
        var parent = document.getElementById("<%=creditGridView.ClientID%>");

    var items = parent.getElementsByTagName("input");
    for (i = 0; i < items.length; i++) {
        if (items[i].id != currentRdBtnId && items[i].type == "radio") {
            if (items[i].checked) {
                items[i].checked = false;
            }
        }
        else {
            document.getElementById("<%=radioBtnIndex.ClientID%>").value = i;
        }
    }
}

この関数を GridView を含む同じページに配置すると、正常に動作します。この関数を別の JavaScript ファイルに入れると、エラーが表示されます

UncaughtTypeError: null のメソッド 'getElementByTagName' を呼び出せません

ここで変数parentは値を取得していますnulldocument.getElementById("<%=creditGridView.ClientID%>");つまり、関数が同じページにない場合、ステートメントは GridView id を取得していません。この問題を解決したり、GridView id にアクセスする別の方法を教えてくれたりできますか?

4

1 に答える 1

0

<%=creditGridView.ClientID%>別の js ファイルのように式を使用することはできません。そのような式が aspx ページだけに配置されている場合、ページのレンダリング中に評価され、計算された値 (例: gridview コントロールのクライアント ID) に置き換えられます。しかし、別のファイルはasp.netによって処理されないため、そのまま残されました。いくつかのcssクラスでGridViewをマークし、別のjsファイルでcssクラスセレクターを使用してGridViewを取得できます。

于 2013-01-06T08:21:13.947 に答える