Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

DaniloTec

[Resolvido] UpdatePanel dentro da asp:Table

Recommended Posts

Bom dia gente.

Estou fazendo um formulário dinâmico que exibe um conteúdo dependendo do item que o usuário seleciona no dropdownlist. Estou fazendo isso utilizando ASP.NET AJAX e não está funcionando.

No início eu coloquei todo o conteúdo do asp:Table dentro do UpdatePanel e funcionou, mas como eu só quero 2 campos com essa função resolvi colocar o UpdatePanel dentro do asp:Table e não funcionou.

Isso é possível?

Segue o código:

<asp:UpdatePanel ID="upEscolaridade" runat="server">
<ContentTemplate>

<asp:TableRow runat="server">
<asp:TableCell CssClass="formColuna1" runat="server">Grau de escolaridade:</asp:TableCell>
<asp:TableCell CssClass="formColuna2" runat="server">
<asp:DropDownList ID="ddlEscolaridade" runat="server" CssClass="form1" OnSelectedIndexChanged="ddlEscolaridade_SelectedIndexChanged" AutoPostBack="true">
<asp:ListItem Value=" ">Selecione...</asp:ListItem>
<asp:ListItem>2º Grau Completo</asp:ListItem>
<asp:ListItem>2º Grau Técnico</asp:ListItem>
<asp:ListItem>Superior Cursando</asp:ListItem>
<asp:ListItem>Superior Completo</asp:ListItem>
<asp:ListItem>Pós Graduado</asp:ListItem>
</asp:DropDownList>
</asp:TableCell>
</asp:TableRow>
					
...

...

					
<asp:TableRow ID="trPos" runat="server">
<asp:TableCell CssClass="formColuna1" runat="server">Qual o curso de pós?</asp:TableCell>
<asp:TableCell CssClass="formColuna2" runat="server"><asp:TextBox ID="txtPos" runat="server" CssClass="form1" Width="140px"></asp:TextBox></asp:TableCell>
</asp:TableRow>

</ContentTemplate>
</asp:UpdatePanel>

Vlw!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola danilo, sim é possivel, eu tenho uma aplicação com updatePanel e form dinamico, é bem simples, acredito que você colocou seu form dinamico no lugar errado... segue o codigo de como está funcionando comigo.

 

<asp:UpdatePanel ID="upEscolaridade" runat="server">
<ContentTemplate>

<table style="margin-left:20px;"> 
	<tr>
	 <td colspan="3">
		Entidade:<br />	
	  <asp:DropDownList ID="ddlEntidade" runat="server">
	  </asp:DropDownList>
		 <asp:RequiredFieldValidator ID="RequiredFieldValidator2" 
		 runat="server" ErrorMessage="RequiredFieldValidator" ValidationGroup="add" 
		 ControlToValidate="ddlEntidade"  Text="*"></asp:RequiredFieldValidator>
	  </td>
	  <td style="padding-top:15px;">
	  <asp:Button ID="btnAdicionar" runat="server" 
		UseSubmitBehavior="false"  Text="Add" ValidationGroup="add" 
		onclick="btnAdicionar_Click" />
	 </td>
	</tr>	 
	</table>
	<br /> 
   <div id="entidade">
	<asp:Panel ID="pnlEnt" runat="server">  
	 <table width="500"> 
	   <tr>
		<td>
		 <fieldset><legend>Entidades</legend>
		  <asp:Panel ID="pnlEntidades" runat="server">	 
		  </asp:Panel>
		 </fieldset>
		</td>
	   </tr>
	  </table>
	 </asp:Panel>

</ContentTemplate>
</asp:UpdatePanel>

Sendo o Panel "pnlEntidades", o objeto onde eu adiciono o formulário dinamico, após clicar no botão "btnAdicionar".

 

Espero ter ajudado.

 

Abraço e sucesso!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, Yslladd.

No seu exemplo, você está utilizando uma table do HTML, até aí funciona mesmo.

Eu estou utilizando a table do asp.net e acho que é esse o problema, entende?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você é obrigado a fazer dessa forma? Não pode por um html...

Na verdade isso também vira um html kra, se você exibir codigo fonte verás.

 

Ou pode tentar com div sendo que terá mais trabalho.

 

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, não sou obrigado a fazer desta forma. Só quero saber se isso é possível.

O resultado final é um HTML, correto. Mas o AJAX é executado no servidor (runat="server") e lá ainda são componentes ASP.NET.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O botao ou componente que gera o POST no ajax precisa estar dentro do updatepanel ou voce precisa adicionar uma trigger no updatepanel. Clica com o botao direito no updatepanel e vai nas triggers. Acho que resolve.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, Oenning.

Se eu colocar o botão dentro do UpdadePanel eu vou ter que colocar todo o conteúdo do formulário tmb e isso não responde a minha dúvida.

Todas as funções AJAX do form estão funcionando. Eu só quero saber se é possível ter mais de um UpdadePanel dentro do form e se eu posso colocá-lo dentro da aspTable?

Só isso. :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

O botao ou componente que gera o POST no ajax precisa estar dentro do updatepanel ou voce precisa adicionar uma trigger no updatepanel. Clica com o botao direito no updatepanel e vai nas triggers. Acho que resolve.

Estou tentando usar a trigger, mas não estou conseguindo. Qual a diferença entre trigger e ContentTemplate?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Me corrija se eu estiver errado, mas a trigger você usa apenas para forçar o botão a dar um postback que está desntro do updatepanel.

 

Eu não sei da sua necessidade, mas acho que usando as tags comuns do html você teria um resultado, temos também como opção você usar um objeto literal, aí no codigo c# você vai adicionando com stringbuilder e depois passa para o literal o resultado do seu form dinamico. Com o literal você consegue adicionar dinamicamente com tags html.

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tirei a teble do asp.net e coloque html normal e agora está dando quase certo.

As validações estão funcionando, as máscaras tmb. O único problema é que quando submetido o form as mensagens de erro não aparecem mais. Exemplo, quando eu abro o form e clico em gravar ele exibe as mensagens de erro apontando os campos obrigatórios, mas se eu abro o form e seleciono uma opção do dropdonlist que exibe outros campos já não aparece mais as mensagens de erro quando tento submeter pela segunda vez.

Consegui explicar o que acontece? :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala aí, ta funcionando legal, não sei o que pode ser, mas algumas dessas validações você pode especificar usando esse atributo:

ValidationGroup="nomeDoGrupo"

Tente algo assim, aí na validação do campo você coloca o mesmo nome desse kra.

 

Isso serve para você validar mais de um form, com validações diferentes.

 

Testei no web e funcionou legal parabéns.

 

Abraço e sucesso!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mesmo com o ValidationGroup continua não funcionando local. Mas já me dou por satisfeito por estar funcionando quando publico, hehe...

Vou postar todo o código que está online no link que passei pra servir de base e exemplo pro pessoal.

 

pagina.aspx

<form id="form1" runat="server">
		<asp:ScriptManager ID="ScriptManager1" runat="server" />
		<div>
			<asp:UpdatePanel ID="UpdatePanel1" runat="server">
		   <ContentTemplate>
				<table id="form">
					<tr> 
						<td>Nome: </td>
						<td>
							<asp:TextBox ID="txtNome" runat="server"></asp:TextBox>
							<asp:RequiredFieldValidator ID="rfvNome" ControlToValidate="txtNome" runat="server" ErrorMessage="*"></asp:RequiredFieldValidator>
						</td>
					</tr> 
					
					<tr> 
						<td>Nascimento: </td>
						<td>
							<asp:TextBox ID="txtNascimento" runat="server"></asp:TextBox>
							 <cc1:MaskedEditExtender ID="meeNascimento" TargetControlID="txtNascimento" Mask="99/99/9999" MaskType="Date" runat="server"></cc1:MaskedEditExtender>
							  <cc1:MaskedEditValidator ID="mevNascimento" ControlExtender="meeNascimento" IsValidEmpty="false" ControlToValidate="txtNascimento" EmptyValueMessage="*" ErrorMessage="*" runat="server"></cc1:MaskedEditValidator>
						</td>
					</tr> 
					
					<tr id="trTipoEndereco" runat="server"> 
						<td>Tipo endereço: </td>
						<td>
							<asp:DropDownList ID="ddlTipoEndereco" runat="server" OnSelectedIndexChanged="ddlTipoEndereco_SelectedIndexChanged" AutoPostBack="true">
								<asp:ListItem Value="">...</asp:ListItem>
								<asp:ListItem Value="Casa">Casa</asp:ListItem>
								<asp:ListItem Value="Apartamento">Apartamento</asp:ListItem>
							</asp:DropDownList>
						</td>
					</tr> 
					
					<tr id="trEndereco" runat="server"> 
						<td>Endereço: </td>
						<td>
							<asp:TextBox ID="txtEndereco" runat="server"></asp:TextBox>
							<asp:RequiredFieldValidator ID="rfvEndereco" ControlToValidate="txtEndereco" runat="server" ErrorMessage="*"></asp:RequiredFieldValidator>
						</td>
					</tr> 
				</table>
					
			</ContentTemplate>
		</asp:UpdatePanel>
			<table> 
			   <tr> 
					<td colspan="2"><asp:Button ID="btnGravar" runat="server" Text="Gravar" OnClick="btnGravar_Click" /></td>
				</tr>					 
			 </table> 
		</div>
	</form>

pagina.cs

protected void Page_Load(object sender, EventArgs e)
	{
		trEndereco.Visible = false;
	}

	protected void ddlTipoEndereco_SelectedIndexChanged(object sender, EventArgs e)
	{
		if (ddlTipoEndereco.SelectedValue == "Casa")
		{
			trEndereco.Visible = true; 
			
		}
	}
	protected void btnGravar_Click(object sender, EventArgs e)
	{
		Response.Write("Done!");
	}
Espero que ajude.

Vlw, gente!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.