0

1つのグリッドビューを含む1つのASP.NETアプリケーションがあります。このグリッドビューには、チェックボックスの4つのテンプレート列とリンクボタンの2つのテンプレート列が含まれています。最初のチェックボックスをクリックすると、両方のリンクボタンが有効になります。そうでない場合は、無効モードになります。この機能は正常に機能しています。しかし、私の問題は、フォームの読み込み時に、最初の列がチェックされているかどうかをチェックすることです。チェックボックスがチェックされていない場合、リンクボタンは無効モードになります。ただし、このチェックボックスをオンにすると有効になりますが、リダイレクトするためのリンクはありません。私のコードを以下に示します。

 protected void DGDocuments_ItemDataBound(object sender, DataGridItemEventArgs e)
    {
        if (e.Item.ItemIndex == -1) return;

        BindCheckBox(e.Item, "chkRead");
        BindCheckBox(e.Item, "chkCreate");
        BindCheckBox(e.Item, "chkUpdate");
        BindCheckBox(e.Item, "chkDelete");

        CheckBox chkID = (CheckBox)e.Item.FindControl("chkRead");
        if (!chkID.Checked)
        {
            LinkButton lnkPermission = (LinkButton)e.Item.FindControl("lnkFieldPermssion");
            LinkButton lnkSetRules = (LinkButton)e.Item.FindControl("lnkAddRules");

            lnkPermission.Enabled = false;
            lnkSetRules.Enabled = false;
        }
    }

デザイナーページ:

 <asp:TemplateColumn HeaderText="Read" ItemStyle-HorizontalAlign="Center">
     <ItemTemplate>
         <asp:CheckBox ID="chkRead" runat="server" Text='<%# Eval("Read") %>' onclick="javascript:EnablePermissoin(this,5,6);" />
     </ItemTemplate>
 </asp:TemplateColumn>
 <asp:TemplateColumn HeaderText="Rules" ItemStyle-HorizontalAlign="Center" ItemStyle-Font-Bold="true">
     <ItemTemplate>
         <asp:LinkButton ID="lnkAddRules" Text="Add Rules" runat="server"  CommandName="cmdSetRules"  />
     </ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Field Permission" ItemStyle-HorizontalAlign="Center" ItemStyle-Font-Bold="true">
    <ItemTemplate>
        <asp:LinkButton ID="lnkFieldPermssion" Text="Set" runat="server" CommandName="cmdFieldPermission" />
    </ItemTemplate>
</asp:TemplateColumn>

Javascriptは次のとおりです。

function EnablePermissoin(chkB, cellNumber1, cellNumber2) {
        var IsChecked = chkB.checked;
        if (IsChecked) {

            var cell1 = chkB.parentElement.parentElement.cells[cellNumber1];
            for (i = 0; i < cell1.childNodes.length; i++) {
                if (cell1.childNodes[i].tagName == "A") {
                    cell1.childNodes[i].disabled = false;

                }
            }
            var cell2 = chkB.parentElement.parentElement.cells[cellNumber2];
            for (i = 0; i < cell2.childNodes.length; i++) {
                if (cell2.childNodes[i].tagName == "A") {
                    cell2.childNodes[i].disabled = false;
                }

            }

        }
        else {
            var cell1 = chkB.parentElement.parentElement.cells[cellNumber1];
            for (i = 0; i < cell1.childNodes.length; i++) {
                if (cell1.childNodes[i].tagName == "A") {

                    cell1.childNodes[i].disabled = true;
                }

            }
            var cell2 = chkB.parentElement.parentElement.cells[cellNumber2];
            for (i = 0; i < cell2.childNodes.length; i++) {
                if (cell2.childNodes[i].tagName == "A") {

                    cell2.childNodes[i].disabled = true;
                }
            }
        }
    }

これは、フォームの読み込み時にリンクボタンを無効にせずに、ブラウザのビューソースから取得したコードです。

<td align="center" style="font-weight:bold;">
    <a id="DGDocuments_ctl23_lnkAddRules" href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;DGDocuments$ctl23$lnkAddRules&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, true))">Add Rules</a>
</td><td align="center" style="font-weight:bold;">
    <a id="DGDocuments_ctl23_lnkFieldPermssion" href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;DGDocuments$ctl23$lnkFieldPermssion&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, true))">Set</a>
</td>

ロード時にリンクボタンを無効にすると、これはビューソースから取得したコードになります。

<td align="center" style="font-weight:bold;">
    <a id="DGDocuments_ctl23_lnkAddRules" disabled="disabled">Add Rules</a>
</td><td align="center" style="font-weight:bold;">
    <a id="DGDocuments_ctl23_lnkFieldPermssion" disabled="disabled">Set</a>
</td>

これを解決するのを手伝ってください。前もって感謝します。

4

2 に答える 2

4

LinkBut​​tonサーバー側を無効にすると、タグのonclickイベントハンドラーが生成されないように見えます。そのため、JavaScriptを使用してLinkBut​​tonを有効にすると、ポストバックする方法がわかりません。LinkBut​​tonを通常どおりにレンダリングしてから、JavaScriptで無効にするか、チェックボックスのAutoPostbackをTrueに設定して、サーバー側で有効にすることをお勧めします。

于 2010-10-19T17:13:35.277 に答える
1

あなたはあなたの解決策を再考しなければならないでしょう。LinkBut​​tonsは、HTMLで<A>タグを生成するだけです。<A>タグを「無効」にすることはできないため、LinkBut​​tonを無効に設定すると、ASP.NETはタグからHREFを削除して、クリックしても何も起こらないようにします。<A>タグを無効にするJavaScriptが機能しないことを指摘しておく必要があります。これにより、<A>タグは無効に見えますが、クリック可能です。

これをクライアント側で機能させるには、JavaScript関数を使用して<A>タグにHREFを追加および削除する必要があります。他のオプションには、ASP.NETがHREFの削除と追加を処理するようにサーバー側ですべてを実行することや、有効または無効にできる通常のasp:Buttonなどの別のコントロールに切り替えることが含まれます。

于 2010-10-19T17:49:22.050 に答える