Frage

In dem folgenden .NET 3.5-Code in einer aspx-Datei abgelegt wird ein JavaScript-Fehler auslösen, wenn die Seite (für Benutzer, die JavaScript aktiviert ist) geladen ist:

<noscript>
    <asp:TextBox ID="txt" runat="server"></asp:TextBox>
    <asp:RequiredFieldValidator ID="txt_RequiredFieldValidator" runat="server" 
      ControlToValidate="txt"></asp:RequiredFieldValidator>
    <asp:Button ID="btn" runat="server" Text="Button" />
</noscript>

Der Fehler tritt auf, weil der JavaScript durch die ASP.NET Validierungssteuer erzeugt nicht eine Null enthalten überprüfen, bevor die zweite Codezeile unter:

var ctl00_body_txt_RequiredFieldValidator =
  document.all ?
    document.all["ctl00_body_txt_RequiredFieldValidator"] :
    document.getElementById("ctl00_body_txt_RequiredFieldValidator");

ctl00_body_txt_RequiredFieldValidator.controltovalidate = "ctl00_body_txt";

Kann mir jemand eine Abhilfe für dieses vorschlagen?


Fußnote: Warum mache ich das? Für meine Nicht-JavaScript-Benutzer Ich ersetzt einige AJAX-Funktionalität mit einigen verschiedenen UI-Komponenten, die Validierung müssen.

War es hilfreich?

Lösung

Sie sollten die folgenden zum RequiredFieldValidator hinzufügen:

enableclientscript="false"

Sehen, wie Sie diese verwenden in

Dies wird die Validierung erzwingen (automatisch) auf der Serverseite für Sie geschehen.

So stellen Sie sicher, dass Sie „ Seite aufrufe .IsValid “, bevor Sie die Antwort verarbeiten.

Siehe BaseValidator.EnableClientScript für weitere Details.

Andere Tipps

Die Javascript sucht ein Element in der noscript enthalten? AFAIK gibt es keine saubere Möglichkeit, Skript-Unterstützung von der Serverseite zu erkennen.

Ich denke, Sie werden in einer Umleitung bauen müssen (ich habe dies mit einem Meta-Refresh in einem Header noscript getan gesehen, wenn Sie nicht über einen Überprüfungsfehler ausmachen) zu einem „bitte turnscript auf schieben noscript Benutzer Seite“oder eine Operation tun, um die Validierung / Steuer Bindung, die eine gewisse Menge an Rad neu erfinden zu lockern nehmen kann. Dies ist einer jener Bereiche, in denen eine enge Kopplung des asp.net zwischen Controller und Ansicht wirklich straft.

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