ASP - Popular div com response.write

Jammin @

Power Member
Boas, tenho uma masterpage em asp e depois adicionei uma página, até aqui muito bem.

Se escrever um texto qualquer no pagina.aspx fica no sitio, só que o texto é carregado no pagina.aspx.vb na base de dados no qual faço o seguinte:

Imports System.Data.OleDb
Imports System.Web.HttpContext
Imports System.Data
Partial Class _Default
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim Con = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Current.Server.MapPath("~/App_Data/ejv.mdb") + ";User ID=Admin;Password=")

'Variáveis para irmos buscar o ultimo ID
Dim id_cmd As String
Dim identificador As OleDbDataAdapter
Dim idtable As DataSet = New DataSet

'Vai buscar o maior número registado
id_cmd = " select top 1 Conteudo from noticias order by ID desc"
idtable = New DataSet

Con.Open()
identificador = New OleDbDataAdapter
identificador.SelectCommand = New OleDbCommand(id_cmd, Con)
identificador.Fill(idtable)
Con.Close()

For Each id_rows As DataRow In idtable.Tables(0).Rows
Response.Write("<p class='geral'>" & id_rows("conteudo") & "</p>")
Next
End Sub

Ele escreve o paragráfo mas escreve antes das divs todas, ou seja fica em cima do banner.

Como posso por isto a escrever no sitio certo? Talvez programar no aspx não? já tentei colar o código mas dá uma data de erros.

Cumprimentos
 
Estive a pesquisar e não encontro nada sobre popular uma div com o response.write a alternativa será meter o <% codigo %> dentro da div mas ai todos os códigos mudam e eu nunca programei ai dentro, alguem tem um exemplo?
 
Estive a pesquisar e não encontro nada sobre popular uma div com o response.write a alternativa será meter o <% codigo %> dentro da div mas ai todos os códigos mudam e eu nunca programei ai dentro, alguem tem um exemplo?

Já consegui meter o codigo no .aspx

Na masterpage tenho <div id="news" runat="server">

tenho script dentro do content place holder e mesmo assim escreve por cima da página.

Alguem me pode ajudar sff, cumprimentos
 
Boas o response.Write não funciona bem como estás a pensar. Na verdade em ASP.NET os controlos são todos preparados e apenas no evento Render é que é gerado o HTML. Ao usares o Response.Write vais estar a enviar conteudo antes do html ter sido escrito.

O que tu deves fazer é criar um controlo que aceite um DataSource e que repita os dados linha a linha.
No teu caso o que deves querer fazer é criar um repeater do gênero:

<asp:repeater ID="Repeater1" runat="server"><ItemTemplate>
<p class='geral'><asp:Literal ID="conteudos" runat="server" Text='<%# Eval("conteudo")' /></p>
</ItemTemplate></asp:Repeater>

Depois no evento PageLoad deves aplicar a tua Dataset ao Repeater através da propriedade DataSource. Finalizando com uma chamada ao método DataBind para aplicar o DataSource:

Repeater1.DataSource = idtable
Repeater1.DataMember = "nome_da_tabela_no_dataset"
Repeater1.DataBind()

Se fosse a ti procurava primeiro compreender como funciona o ASP.NET porque parece-me que ainda estás ligado ao método de programação de ASP tradicional e ou PHP.

Cumps [[]]
 
Boas o response.Write não funciona bem como estás a pensar. Na verdade em ASP.NET os controlos são todos preparados e apenas no evento Render é que é gerado o HTML. Ao usares o Response.Write vais estar a enviar conteudo antes do html ter sido escrito.

O que tu deves fazer é criar um controlo que aceite um DataSource e que repita os dados linha a linha.
No teu caso o que deves querer fazer é criar um repeater do gênero:

<asp:repeater ID="Repeater1" runat="server"><ItemTemplate>
<p class='geral'><asp:Literal ID="conteudos" runat="server" Text='<%# Eval("conteudo")' /></p>
</ItemTemplate></asp:Repeater>

Depois no evento PageLoad deves aplicar a tua Dataset ao Repeater através da propriedade DataSource. Finalizando com uma chamada ao método DataBind para aplicar o DataSource:

Repeater1.DataSource = idtable
Repeater1.DataMember = "nome_da_tabela_no_dataset"
Repeater1.DataBind()

Se fosse a ti procurava primeiro compreender como funciona o ASP.NET porque parece-me que ainda estás ligado ao método de programação de ASP tradicional e ou PHP.

Cumps [[]]

Desculpa não percebi, isso dos Datasources não é wizard? eu não quero usar isso, só quero posicionar aquele código onde eu quero, porque ele funciona.

Cumprimentos
 
Não não é wizard. E não o teu código não funciona como estás a fazer.

Se queres usar esses loops (que já nem faz sentido em ASP.NET) então tens que criar um Controlo na posição que queres repetir os conteúdos e escrever para lá. Só que nota. Muito probavelmente o que vais acabar por fazer é concatenar uma grande String o que é mais pesado em termos de processamento. Podes ainda usar a classe StringBuilder que sempre torna menos pesado a concatenação.

De qualquer forma e se insistes na tua abordagem cria uma literal onde queres colocar o conteúdo

<asp:Literal ID="litConteudo" runat="server" />

e dentro do Loop:

litConteudo.Text &= "<p class='geral'>" & id_rows("conteudo") & "</p>"
 
Não não é wizard. E não o teu código não funciona como estás a fazer.

Se queres usar esses loops (que já nem faz sentido em ASP.NET) então tens que criar um Controlo na posição que queres repetir os conteúdos e escrever para lá. Só que nota. Muito probavelmente o que vais acabar por fazer é concatenar uma grande String o que é mais pesado em termos de processamento. Podes ainda usar a classe StringBuilder que sempre torna menos pesado a concatenação.

De qualquer forma e se insistes na tua abordagem cria uma literal onde queres colocar o conteúdo

<asp:Literal ID="litConteudo" runat="server" />

e dentro do Loop:

litConteudo.Text &= "<p class='geral'>" & id_rows("conteudo") & "</p>"

Obrigado pela ajuda a sério mas eu não estou a perceber nada do que me estás a dizer

Cumprimentos
 
E quanto à outra abordagem tb não percebeste?

Básicamente transformas o código nisto:

For Each id_rows As DataRow In idtable.Tables(0).Rows
litConteudo.Text &= "<p class='geral'>" & id_rows("conteudo") & "</p>"
Next

e colocas isto:

<asp:Literal ID="litConteudo" runat="server" />

no sitio que queres que apareça o conteúdo.

Se quiseres aprender sobre os repeaters e outros controlos podes começar por aqui:

http://www.asp.net/LEARN/data-access/tutorial-29-vb.aspx
http://www.asp.net/LEARN/data-access/
 
E quanto à outra abordagem tb não percebeste?

Básicamente transformas o código nisto:

For Each id_rows As DataRow In idtable.Tables(0).Rows
litConteudo.Text &= "<p class='geral'>" & id_rows("conteudo") & "</p>"
Next

e colocas isto:

<asp:Literal ID="litConteudo" runat="server" />

no sitio que queres que apareça o conteúdo.

Se quiseres aprender sobre os repeaters e outros controlos podes começar por aqui:

http://www.asp.net/LEARN/data-access/tutorial-29-vb.aspx
http://www.asp.net/LEARN/data-access/


Assim já percebi, irei testar brevemente mas se dizes que funciona é porque funciona, cumprimentos e obrigado pela paciência (e pelos links) ;)
 
podes utilizar uma gridview ou um detailview , em que ambos utilizas o datatable ou dataset atraves de um datasource

o select que tu tens do teu dataset (identificador)

se tiveres uma gridview

grvteste.datasource = identificador
gevteste.databind ()
escolhe na propriedades da grid campos automaticos

para detailview

detailteste.datasource = identificador
detailteste.databind()

tb tens de ir as propriedades do mesmo mecher com os pampos

diferença entre gridview e datailview
gridview (poe colunas na vertival)
detailview (poe as colunas na horizontal)

é so uma ideia


espero que tenha ajudado
 
Back
Topo