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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top