Domanda

Il seguente codice di .NET 3.5, collocato in un file aspx, attiverà un errore JavaScript quando la pagina viene caricata (per gli utenti che hanno abilitato JavaScript):

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

L'errore avviene perché il JavaScript generato dal controllo ASP.NET validatore non contiene un nullo a controllare prima della seconda riga codice qui sotto:

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

Qualcuno può suggerire una soluzione a questo?


Nota: perché sto facendo questo? Per i miei utenti non JavaScript Sto sostituendo alcune funzionalità AJAX con alcune diverse componenti dell'interfaccia utente, che hanno bisogno di convalida.

È stato utile?

Soluzione

Si dovrebbe aggiungere quanto segue alla RequiredFieldValidator:

enableclientscript="false"

Visto che si sta utilizzando questi nei tag

Questo costringerà la convalida per accadere (automaticamente) sul lato server per voi.

Basta fare in modo che tu chiami " Pagina .IsValid " prima di elaborare la risposta.

BaseValidator.EnableClientScript per maggiori dettagli.

Altri suggerimenti

Il javascript è alla ricerca di un elemento contenuto nella noscript? Per quanto ne sappia non c'è modo pulito per rilevare il supporto script dal lato server.

Credo che avrete bisogno di costruire in un redirect (Ho visto questo fatto con un meta refresh in un'intestazione noscript se non vi dispiace un errore di convalida) per spingere gli utenti a noscript un "per favore turnscript su pagina" o fare un intervento chirurgico per allentare la validazione / controllo di legame che può richiedere una certa quantità di reinventare ruota. Questo è uno di quei settori in cui forte accoppiamento di asp.net tra controller e vista punisce davvero.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top