Quando Request.Params e Request.Form são diferentes?
Pergunta
Recentemente encontrei um problema em que um valor era nulo se acessado com Request.Form, mas bom se recuperado com Request.Params.Quais são as diferenças entre esses métodos que podem causar isso?
Solução
Request.Form inclui apenas variáveis postadas por meio de um formulário, enquanto Request.Params inclui variáveis de formulário postadas e variáveis get especificadas como parâmetros de URL.
Outras dicas
Request.Params contém uma combinação de QueryString, Form, Cookies e ServerVariables (adicionados nessa ordem).
A diferença é que se você tiver uma variável de formulário chamada "key1" que está tanto no QueryString quanto no Form, então Request.Params["key1"] retornará o valor QueryString e Request.Params.GetValues("key1") retornará um array de [valor de string de consulta, valor de formulário].
Se houver vários valores de formulário ou cookies com a mesma chave, esses valores serão adicionados ao array retornado por GetValues (ou seja,GetValues não retornará uma matriz irregular)
O motivo foi que o valor que eu estava recuperando era de um elemento de formulário, mas o envio foi feito através de um link + JQuery, e não através de um botão de formulário enviar.