Estou tentando limpar/redefinir todos os controles de caixa de texto e dropdown em uma página, depois que um usuário seleciona o botão "Enviar". Gostaria de fazer isso programaticamente, então se outros controles forem adicionados/removidos depois, ainda funcionará.
Eu tenho isso, parte do qual peguei emprestado de outra resposta semelhante no SO:
protected void ResetAllControls()
{
foreach (Control c in this.Controls)
{
if (c is TextBox)
{
TextBox tb = (TextBox)c;
if (tb != null)
{
tb.Text = string.Empty;
}
}
if (c is DropDownList)
{
DropDownList ddl = (DropDownList)c;
ddl.SelectedIndex = -1;
}
}
}
c resolve para System.Web.UI.LiteralControl, e nunca resolve para Textbox ou DropDownList, então não redefine nada na página. Alguém pode me dizer o que estou esquecendo?
O problema é que os controles da página são dos tipos , , e os
LiteralControl
controlesHTMLHead
and são alguns controles dentro de outros controles da página, não filhos diretos da página. Por exemplo, se você tem um formulário e dentro do seu formulário você tem caixas de texto e listas suspensas, mas elas estão incorporadas no formulário e o formulário está incorporado na página, então os controles and que você está procurando não são os controles da página, mas controles de um controle da sua página. Então você precisará aplicar uma busca profunda entre seus controles. Se eu estiver certo em pensar que não há ciclos em controles (eu não trabalho com WebForms .NET desde 2017, então não tenho as memórias mais recentes, para dizer o mínimo), então algo como isto deve funcionar:HTMLForm
TextBox
DropDownList
DropDownList
TextBox
E você chama isso inicialmente via
ResetAllControls(this.Controls);
Se isso rodar para sempre ou lançar uma exceção de stackoverflow, então há um ciclo entre seus controles e você precisará de alguma validação adicional em vez de apenas um
else
para o terceiro caso. Me avise se isso funcionar para você.