Frage

Ich habe eine ASP.NET-Seite mit einem asp:button, der nicht sichtbar ist.Ich kann es mit JavaScript nicht sichtbar machen, da es nicht auf der Seite gerendert wird.

Was kann ich tun, um das Problem zu beheben?

War es hilfreich?

Lösung

Wenn Sie es auf der Clientseite bearbeiten müssen, können Sie die Visible-Eigenschaft nicht auf der Serverseite verwenden.Setzen Sie stattdessen den CSS-Anzeigestil auf „none“.Zum Beispiel:

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

Dann könnten Sie es auf der Clientseite sichtbar machen mit:

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

Sie könnten es wieder verstecken mit:

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

Bedenken Sie, dass es in der Praxis zu Problemen kommen kann, wenn die ClientID komplexer als „Label1“ ist.Sie müssen die ClientID mit getElementById verwenden, nicht die serverseitige ID, wenn sie unterschiedlich sind.

Andere Tipps

Versuche dies.

<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>

Verwenden Sie dazu keinen serverseitigen Code, da dies ein Postback erfordern würde.Anstatt Visibility="false" zu verwenden, können Sie einfach eine CSS-Eigenschaft festlegen, die die Schaltfläche verbirgt.Dann schalten Sie diese Eigenschaft in Javascript zurück, wann immer Sie die Schaltfläche wieder anzeigen möchten.

Die ClientID wird verwendet, da sie sich von der Server-ID unterscheiden kann, wenn sich die Schaltfläche innerhalb eines Naming Container-Steuerelements befindet.Dazu gehören Panels verschiedener Art.

Weiter mit was Dave Ward sagte:

  • Das lässt sich nicht einstellen Sichtbar -Eigenschaft auf „false“ setzen, da das Steuerelement nicht gerendert wird.
  • Sie sollten das verwenden Stil Eigenschaft, um es festzulegen Anzeige Zu keiner.

Seiten-/Steuerelementdesign

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

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

Code dahinter

Irgendwo im Ladebereich:

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

Javascript-Datei

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

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

Wenn Sie nicht umschalten, sondern nur die Schaltfläche/Beschriftung anzeigen möchten, passen Sie die Javascript-Methode natürlich entsprechend an.

Der wichtige Punkt hierbei ist, dass Sie die Informationen darüber senden müssen ClientID des Steuerelements, das Sie auf der Clientseite manipulieren möchten, in die Javascript-Datei um, indem Sie entweder globale Variablen festlegen oder wie in meinem Beispiel einen Funktionsparameter verwenden.

Da muss man vorsichtig sein XSS wenn man so etwas macht:

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

Die Wahrscheinlichkeit ist groß, dass in diesem Fall niemand die ClientID von Label1 manipulieren kann, aber um auf der sicheren Seite zu sein, sollten Sie den Wert vielleicht über einen von ihnen weiterleiten AntiXss-Bibliotheken Methoden:

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

Dies ist der einfachste Weg, den ich gefunden habe:

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

Ich habe das Gegenteil im Else, also kümmert es sich auch darum, sie anzuzeigen.Dies kann in den Ladevorgang der Seite oder in eine Methode zum Aktualisieren der Steuerelemente auf der Seite erfolgen.

Wenn Sie warten, bis die Seite geladen ist, und dann die Anzeige der Schaltfläche auf „Keine“ setzen, sollte das funktionieren.Dann können Sie es zu einem späteren Zeitpunkt sichtbar machen.

Stellen Sie sicher, dass die Visible-Eigenschaft auf „true“ festgelegt ist, da das Steuerelement sonst nicht auf der Seite gerendert wird.Dann können Sie es mit einem Skript manipulieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top