Bom, outro dia disse que também sabia escrever sobre .NET. Como o pessoal de tecnologia é cético e apesar dos artigos já escritos aqui, vou tentar me arriscar em mais para tirar a prova.
Se tem algo que gosto no WebForms, é a versatilidade. Montagem de páginas dinâmicas (entenda montar como adicionar controles na página em tempo de execução) foi algo com que sempre me dei bem. CMSs como DotNetNuke e Umbraco são exemplos dessa “dinamicidade”. Quem vive disso sabe do que estou falando, das suas vantagens, e problemas.
Dentre eles, é que, como trabalhamos com controle dinâmicos, temos o cuidado de montar todos eles no evendo OnInit da página para manter o ViewState intacto. Até aqui, sem segredos. O problema é quando precisamos aplicar alguma regra de negócio na montagem dos controles que dependa por exemplo, de um valor num TextBox. Isso é um problema porque no OnInit, o ViewState ainda não foi aplicado.
Bom, a informação está lá no ViewState, mas como chegar até ela? Na necessidade, vasculhando o próprio ViewState e com a ajuda deste “How To” da Microsoft, cheguei num método que recebe como parâmetro o UniqueID do controle e o HttpRequest, você consegue chegar no valor antes antes do Page_Load.
public static string getControlValueByRequest(string UniqueID, HttpRequest request) { System.Collections.Specialized.NameValueCollection postedValues = request.Form; String nextKey; String value = string.Empty; for (int i = 0; i < postedValues.AllKeys.Length; i++) { nextKey = postedValues.AllKeys[i]; if (nextKey.Substring(0, 2) != "__") { if (nextKey == UniqueID) { value = postedValues[i]; } } } return value; } |
Aos mais entendidos, sabemos que a informação pode ser recuperada pelo Request.Form, mas o vínculo do valor com o controle de origem da informação que é o complicado, e é onde o método acima faz o trabalho sujo de passar por todo o conjunto de chaves/valor guardado no Request.Form e aplicando uma “regrinha” (atenção ao if (nextKey.Substring(0, 2) != “__”)) para chegar no valor desejado.
Isto posto, mais um helper para seus projetos WebForms, pelo menos para que ainda os cria. 🙂
Bom proveito!
How To da Microsoft
http://msdn.microsoft.com/en-us/library/6c3yckfw.aspx