Domanda

Sto cercando di usare di usare ClientScriptManager.RegisterForEventValidation per registrare un campo nascosto e il valore che sto aggiungendo con ClientScriptManager.RegisterHiddenField. Ho fare questo durante l'evento Render. Ottengo nessun errore, ma ASP.NET 2.0 non sembra essere la convalida del campo. Posso cambiare il valore o cancellare l'intero lato client campo utilizzando Firefox e Firebug, e ASP.NET non genera un errore come dovrebbe.

Il codice di esempio da una classe personalizzata Pagina:

protected override void Render(HtmlTextWriter writer)
{
    ClientScript.RegisterHiddenField("stuff", "things");
    ClientScript.RegisterForEventValidation("stuff", "things");
    base.Render(writer);
}

Il campo nascosto viene aggiunto alla pagina, ma ASP.NET non convalida il campo o il valore il postback. Che cosa mi manca?

È stato utile?

Soluzione

ho capito ciò che si sta cercando di fare, ma utilizzando l'API di convalida Evento non davvero appropriato, in quanto è destinato per la convalida che postback o callback eventi generati dal cliente siano corrette per il controllo server di destinazione, ad esempio, assicurandosi che un clic è gestito dal tasto corretto, o controllando che un evento di modifica su un elenco a discesa non è per un valore che non è stato in origine 'noto' al server.

Nel codice, si sta generando un campo nascosto direttamente al cliente, quindi non c'è alcun controllo per il server per fare riferimento a un postback. Anche se è stato utilizzato un controllo campo nascosto nella pagina del server, ancora non sarebbe in grado di convalidare il valore del campo perché il controllo non genera eventi di postback (non v'è alcun modo per l'utente di interagire con esso, e quindi non eventi per il server per convalidare).

La soluzione più semplice è quella di utilizzare ViewState per memorizzare il valore del campo, poi il postback verificare che il valore di iscrizione del campo è uguale al valore memorizzato in ViewState. ViewState è cifrato di default, quindi è un posto sicuro per memorizzare i dati che non dovrebbero cambiare nel client.

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