ClientScriptManager.RegisterForEventValidation com HiddenField
-
06-09-2019 - |
Pergunta
Eu estou tentando usar para usar ClientScriptManager.RegisterForEventValidation para registrar um campo e um valor que estou adicionando com ClientScriptManager.RegisterHiddenField escondido. I fazer isso durante o evento Render. Eu recebo nenhum erro, mas o ASP.NET 2.0 não parece ser a validação do campo. Eu posso mudar o valor ou excluir todo o clientside campo usando Firefox e Firebug, e ASP.NET não irá lançar um erro como deveria.
código de exemplo de uma classe personalizada Página:
protected override void Render(HtmlTextWriter writer)
{
ClientScript.RegisterHiddenField("stuff", "things");
ClientScript.RegisterForEventValidation("stuff", "things");
base.Render(writer);
}
O campo oculto é adicionado à página, mas o ASP.NET não validar o campo ou valor no postback. O que eu estou ausente?
Solução
Eu entendo o que você está tentando fazer, mas usando a API de validação de eventos não é realmente apropriado, pois destina-se a validação de que postback ou de retorno de chamada eventos gerados pelo cliente estão corretos para o controle de servidor alvo, por exemplo, certificando-se que um clique é tratado pelo botão correto, ou verificar que um evento de alteração em uma lista suspensa não é para um valor que não era originalmente 'conhecido' para o servidor.
Em seu código, você está gerando um campo escondido diretamente para o cliente, de modo que não há controle para que o servidor de referência sobre uma nova postagem. Mesmo se você usou um controle de campo escondida na página de servidor, você ainda não seria capaz de validar o valor do campo porque o controle não gera eventos de postback (não há nenhuma maneira para que o usuário interagir com ele, e, portanto, não eventos para o servidor para validar).
A solução mais simples é usar o ViewState para armazenar o valor do campo, em seguida, no postback verificar se o valor lançado do campo é igual ao valor armazenado no ViewState. ViewState é criptografada por padrão, por isso é um lugar seguro para armazenar dados que não deve mudar no cliente.