Esiste un modo elegante per confrontare una casella di controllo e una casella di testo utilizzando i validatori ASP.NET?

StackOverflow https://stackoverflow.com/questions/88361

  •  01-07-2019
  •  | 
  •  

Domanda

Ho un ripetitore Asp.Net, che contiene una casella di testo e una casella di controllo.Devo aggiungere una convalida lato client che verifichi che quando la casella di controllo è selezionata, la casella di testo può accettare solo un valore pari a zero o vuoto.

Vorrei utilizzare uno o più controlli di validazione di Asp.Net per ottenere ciò, per fornire una visualizzazione coerente per gli errori lato client (gli errori lato server sono gestiti da un altro sottosistema).

Asp:CompareValidator non sembra essere sufficientemente flessibile per eseguire questo tipo di confronto complesso, quindi rimango a guardare Asp:CustomValidator.

Il problema che sto riscontrando è che non sembra esserci alcun modo per passare informazioni personalizzate alla funzione di convalida.Questo è un problema perché i ClientId della casella di controllo e della casella di testo mi sono sconosciuti in fase di esecuzione (poiché fanno parte di un ripetitore).

COSÌ...Le mie opzioni sembrano essere:

  1. Passa in qualche modo la casella di testo e la casella di controllo a CustomValidator (non sembra essere possibile).
  2. Trova la casella di testo tramite JavaScript in base agli argomenti passati da CustomValidator.È anche possibile, visto che ClientId è ambiguo?
  3. Dimentica completamente la convalida ed emetti JavaScript personalizzato (permettendomi di passare entrambi i ClientId a una funzione personalizzata).

Qualche idea su quale potrebbe essere un modo migliore per implementarlo?

È stato utile?

Soluzione

Penso che il modo migliore sarebbe ereditare BaseValidator in una nuova classe e passare quegli ID al tuo controllo come attributi.Dovresti essere in grado di risolvere gli ID all'interno del tuo validatore, senza conoscere l'ID lato client completo generato in fase di esecuzione.Dovresti ottenere prima la convalida dei dati sul server e poi sul client.

Altri suggerimenti

Non puoi inserire CustomValidator all'interno del ripetitore?In caso contrario, puoi crearlo dinamicamente quando il ripetitore è associato e l'utente FindControl()

protected MyDataBound(object sender, RepeaterItemEventArgs e) {
  (CheckBox)cb = (CheckBox)e.Item.FindControl("myCheckboxName");
  (TextBox)tb = (TextBox)e.Item.FindControl("myTextBox");
}

...o qualcosa di simile.Ho scritto il codice a mente.

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