33

asp:buttonが表示されていないASP.NETページがあります。ページにレンダリングされていないため、JavaScriptで表示することはできません。

これを解決するにはどうすればよいですか?

4

7 に答える 7

43

クライアント側で操作する必要がある場合、サーバー側でVisibleプロパティを使用することはできません。代わりに、CSSの表示スタイルを「なし」に設定してください。例えば:

<asp:Label runat="server" id="Label1" style="display: none;" />

次に、次の方法でクライアント側に表示することができます。

document.getElementById('Label1').style.display = 'inherit';

あなたはそれを再び隠すことができます:

document.getElementById('Label1').style.display = 'none';

実際には、ClientIDが「Label1」よりも複雑であるという問題がある可能性があることに注意してください。異なる場合は、サーバー側IDではなくgetElementByIdでClientIDを使用する必要があります。

于 2008-08-11T13:28:55.470 に答える
10

これを試して。

<asp:Button id="myButton" runat="server" style="display:none" Text="Click Me" />

<script type="text/javascript">
    function ShowButton() {
        var buttonID = '<%= myButton.ClientID %>';
        var button = document.getElementById(buttonID);
        if(button) { button.style.display = 'inherit'; }
    }
</script>

ポストバックが必要になるため、これを行うためにサーバー側のコードを使用しないでください。Visibility = "false"を使用する代わりに、ボタンを非表示にするCSSプロパティを設定するだけです。次に、JavaScriptで、ボタンを再度表示するたびにそのプロパティを元に戻します。

ボタンがネーミングコンテナコントロール内にある場合、サーバーIDとは異なる可能性があるため、ClientIDが使用されます。これらには、さまざまな種類のパネルが含まれます。

于 2008-08-11T13:55:29.630 に答える
4

デイブワードが言ったことを続ける:

  • コントロールがレンダリングされないため、 Visibleプロパティをfalseに設定することはできません。
  • Styleプロパティを使用して、表示noneに設定する必要があります。

ページ/コントロールデザイン

<asp:Label runat="server" ID="Label1" Style="display: none;" />

<asp:Button runat="server" ID="Button1" />

背後にあるコード

ロードセクションのどこか:

Label label1 = (Label)FindControl("Label1");
((Label)FindControl("Button1")).OnClientClick = "ToggleVisibility('" + label1.ClientID + "')";

Javascriptファイル

function ToggleVisibility(elementID)
{
    var element = document.getElementByID(elementID);

    if (element.style.display = 'none')
    {
        element.style.display = 'inherit';
    }
    else
    {
        element.style.display = 'none';
    }
}

もちろん、切り替えたくないがボタン/ラベルを表示するだけの場合は、それに応じてjavascriptメソッドを調整します。

ここで重要な点はClientID、クライアント側で操作するコントロールの情報を、グローバル変数を設定するか、私の例のように関数パラメーターを介してjavascriptファイルに送信する必要があるということです。

于 2008-08-11T14:13:11.763 に答える
4

You need to be wary of XSS when doing stuff like this:

document.getElementById('<%= Label1.ClientID %>').style.display

The chances are that no-one will be able to tamper with the ClientID of Label1 in this instance, but just to be on the safe side you might want pass it's value through one of the AntiXss library's methods:

document.getElementById('<%= AntiXss.JavaScriptEncode(Label1.ClientID) %>').style.display
于 2008-08-19T14:41:24.277 に答える
1

これは私が見つけた最も簡単な方法です:

        BtnUpload.Style.Add("display", "none");
        FileUploader.Style.Add("display", "none");
        BtnAccept.Style.Add("display", "inherit");
        BtnClear.Style.Add("display", "inherit");

私は Else に反対のものを持っているので、それらの表示も処理します。これは、ページのロードまたはページ上のコントロールを更新するメソッドで行うことができます。

于 2013-02-10T22:36:52.633 に答える
0

ページが読み込まれるまで待ってから、ボタンの表示をnoneに設定すると、機能するはずです。その後、後で表示できるようにすることができます。

于 2008-08-11T13:29:38.700 に答える
0

Visibleプロパティがtrueに設定されていることを確認してください。設定されていない場合、コントロールはページにレンダリングされません。次に、スクリプトを使用して操作できます。

于 2008-08-11T13:32:43.343 に答える