GRAVAR DADOS COM AJAX EM ASP.NET
ola pessoal, nao consigo gravar os dados no bd mysql com este script ajax
peguei este exemplo aqui : http://www.macoratti.net/09/08/aspn_wsx1.htm
e tentei adapta-lo ao meu projeto porem nao funciona...
obs. quando executo o arquivo .asmx com (comando= Crtl+Shift+W) funciona belezinha.
o problema esta no script da pagina... eu acho...rsrsrs
se alguem puder me ajudar. o codigo é esse:
no arquivo .asmx:
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.ComponentModel
Imports MySql.Data.MySqlClient
Imports System.Web.UI.WebControls
[ô] To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
<System.Web.Script.Services.ScriptService()> _
<System.Web.Services.WebService(Namespace:=[Ô]http://tempuri.org/[Ô])> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
Public Class SalvarDados
Inherits System.Web.Services.WebService
Public vData As String
Public myCONjavaScript As MySql.Data.MySqlClient.MySqlConnection
<WebMethod()> _
Public Sub salvaDados(ByVal numcot As String, ByVal idprod As String, ByVal idempr As String, ByVal idforn As String, ByVal preco As String)
[ô]Try
myCONjavaScript = New MySql.Data.MySqlClient.MySqlConnection([Ô]server=[Ô] & MySQLHost & [Ô];User id=[Ô] & MySQLUsuario & [Ô];password=[Ô] & MySQLSenha & [Ô];database=[Ô] & MySQLDataBase)
vData = Format(CType(Now, Date), [Ô]yyyy-MM-dd hh:mm:ss[Ô])
Dim SqlWebServ As String = [Ô]insert into itens_cot (numcot, idprod, idempr, idforn, preco, data) [Ô] & _
[Ô]values(@numcot, [Ô] & _
[Ô]@idprod, [Ô] & _
[Ô]@idempr, [Ô] & _
[Ô]@idforn, [Ô] & _
[Ô]@preco, [Ô] & _
[Ô]@data)[Ô]
Dim cmd As New MySqlCommand(SqlWebServ, myCONjavaScript) [ô] SqlCommand(SQL, sqlcon)
cmd.CommandType = CommandType.Text
cmd.Parameters.AddWithValue([Ô]@numcot[Ô], numcot)
cmd.Parameters.AddWithValue([Ô]@idprod[Ô], idprod)
cmd.Parameters.AddWithValue([Ô]@idempr[Ô], idempr)
cmd.Parameters.AddWithValue([Ô]@idforn[Ô], idforn)
cmd.Parameters.AddWithValue([Ô]@preco[Ô], preco)
cmd.Parameters.AddWithValue([Ô]@data[Ô], vData)
If myCONjavaScript.State = ConnectionState.Closed Then
myCONjavaScript.Open()
End If
cmd.ExecuteNonQuery()
myCONjavaScript.Close()
[ô]#####################################################
[ô]Catch ex As Exception
[ô] End Try
End Sub
End Class
agora na pagina :
<script language=[Ô]javascript[Ô] type=[Ô]text/javascript[Ô]>
function pageLoad() {
$addHandler($get([Ô]btnHtmlSalvar[Ô]), [Ô]click[Ô], inserirDados);
}
function inserirDados() {
SalvarDados.salvaDados($get([Ô]txtCotacao[Ô]).value, $get([Ô]txtCodProd[Ô]).value, $get([ô]txtCodEmpr[ô]).value, $get([ô]txtCodForn[ô]).value, $get([ô]txtPrec[ô]).value);
$get([Ô]Label3[Ô]).innerHTML = [Ô]Salvo com sucesso[Ô];
}
</script>
simplismente nao grava.
como faço ?
Obrigado!
peguei este exemplo aqui : http://www.macoratti.net/09/08/aspn_wsx1.htm
e tentei adapta-lo ao meu projeto porem nao funciona...
obs. quando executo o arquivo .asmx com (comando= Crtl+Shift+W) funciona belezinha.
o problema esta no script da pagina... eu acho...rsrsrs
se alguem puder me ajudar. o codigo é esse:
no arquivo .asmx:
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.ComponentModel
Imports MySql.Data.MySqlClient
Imports System.Web.UI.WebControls
[ô] To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
<System.Web.Script.Services.ScriptService()> _
<System.Web.Services.WebService(Namespace:=[Ô]http://tempuri.org/[Ô])> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
Public Class SalvarDados
Inherits System.Web.Services.WebService
Public vData As String
Public myCONjavaScript As MySql.Data.MySqlClient.MySqlConnection
<WebMethod()> _
Public Sub salvaDados(ByVal numcot As String, ByVal idprod As String, ByVal idempr As String, ByVal idforn As String, ByVal preco As String)
[ô]Try
myCONjavaScript = New MySql.Data.MySqlClient.MySqlConnection([Ô]server=[Ô] & MySQLHost & [Ô];User id=[Ô] & MySQLUsuario & [Ô];password=[Ô] & MySQLSenha & [Ô];database=[Ô] & MySQLDataBase)
vData = Format(CType(Now, Date), [Ô]yyyy-MM-dd hh:mm:ss[Ô])
Dim SqlWebServ As String = [Ô]insert into itens_cot (numcot, idprod, idempr, idforn, preco, data) [Ô] & _
[Ô]values(@numcot, [Ô] & _
[Ô]@idprod, [Ô] & _
[Ô]@idempr, [Ô] & _
[Ô]@idforn, [Ô] & _
[Ô]@preco, [Ô] & _
[Ô]@data)[Ô]
Dim cmd As New MySqlCommand(SqlWebServ, myCONjavaScript) [ô] SqlCommand(SQL, sqlcon)
cmd.CommandType = CommandType.Text
cmd.Parameters.AddWithValue([Ô]@numcot[Ô], numcot)
cmd.Parameters.AddWithValue([Ô]@idprod[Ô], idprod)
cmd.Parameters.AddWithValue([Ô]@idempr[Ô], idempr)
cmd.Parameters.AddWithValue([Ô]@idforn[Ô], idforn)
cmd.Parameters.AddWithValue([Ô]@preco[Ô], preco)
cmd.Parameters.AddWithValue([Ô]@data[Ô], vData)
If myCONjavaScript.State = ConnectionState.Closed Then
myCONjavaScript.Open()
End If
cmd.ExecuteNonQuery()
myCONjavaScript.Close()
[ô]#####################################################
[ô]Catch ex As Exception
[ô] End Try
End Sub
End Class
agora na pagina :
<script language=[Ô]javascript[Ô] type=[Ô]text/javascript[Ô]>
function pageLoad() {
$addHandler($get([Ô]btnHtmlSalvar[Ô]), [Ô]click[Ô], inserirDados);
}
function inserirDados() {
SalvarDados.salvaDados($get([Ô]txtCotacao[Ô]).value, $get([Ô]txtCodProd[Ô]).value, $get([ô]txtCodEmpr[ô]).value, $get([ô]txtCodForn[ô]).value, $get([ô]txtPrec[ô]).value);
$get([Ô]Label3[Ô]).innerHTML = [Ô]Salvo com sucesso[Ô];
}
</script>
simplismente nao grava.
como faço ?
Obrigado!
1 - Crie o webService(se já não o fez) e publique-o no seu IIS local (é melhor trabalhar com o publicado)
2 - Baixe o JQuery(Download the compressed, production jQuery 1.9.0) e coloque o arquivo baixado na pasta do seu aplicativo
3 - Adicione no form(ou na masterpage) a referência à ele:
4 - Para [Ô]chamar[Ô] o método do VB.NET à partir do browser use:
Na linha em vermelho, atente para colocar o caminho do seu webservice publicado corretamente.
Na linha em azul, veja que o que está entre apóstrofes, são os valores que serão passados para o webmethod
2 - Baixe o JQuery(Download the compressed, production jQuery 1.9.0) e coloque o arquivo baixado na pasta do seu aplicativo
3 - Adicione no form(ou na masterpage) a referência à ele:
<script src=[Ô]jquery-1.9.0.min.js[Ô] type=[Ô]text/javascript[Ô]></script>
4 - Para [Ô]chamar[Ô] o método do VB.NET à partir do browser use:
<script language=[Ô]javascript[Ô] type=[Ô]text/javascript[Ô]>
$.ajax({
type: [Ô]POST[Ô],
[txt-color=#e80000]url: [Ô]http://localhost/NOME_WEBSERVICE_PUBLICADO/SEUWEBSERVICE.ASMX/salvaDados[Ô],[/txt-color]
[txt-color=#0000f0]data: [Ô]{numcot : [ô]NUMCOT[ô], idprod:[ô]IDPROD[ô], idempr :[ô]IDEMPR[ô], idforn: [ô]IDFORN[ô], preco:[ô]PRECO[ô] }[Ô],[/txt-color]
contentType: [Ô]application/json;charset=utf-8[Ô],
dataType: [Ô]json[Ô],
async: false,
success: function(msg) {
alert([Ô]Funcionou![Ô]);
},
error: function(xhr, ajaxOptions, thrownError) {
alert([Ô]ERRO[Ô] + xhr.responseText);
}
});
</script>
Na linha em vermelho, atente para colocar o caminho do seu webservice publicado corretamente.
Na linha em azul, veja que o que está entre apóstrofes, são os valores que serão passados para o webmethod
KERPLUNK,
1º posso publicar direto no servidor (smbatista.net) ou tem que ser local?
2º como chamo este metodo atraves do botao de comando?
1º posso publicar direto no servidor (smbatista.net) ou tem que ser local?
2º como chamo este metodo atraves do botao de comando?
Citação:1º posso publicar direto no servidor (smbatista.net) ou tem que ser local?
Pode ser, desde que no endereço(url) da chamada AJAX esteja o endereço correto
Citação:2º como chamo este metodo atraves do botao de comando?
1 - Coloque a chamada AJAX dentro de uma function:
<script language=[Ô]javascript[Ô] type=[Ô]text/javascript[Ô]>
function Grava()
{
$.ajax({
type: [Ô]POST[Ô],
url: [Ô]http://localhost/NOME_WEBSERVICE_PUBLICADO/SEUWEBSERVICE.ASMX/salvaDados[Ô],
data: [Ô]{numcot : [ô]NUMCOT[ô], idprod:[ô]IDPROD[ô], idempr :[ô]IDEMPR[ô], idforn: [ô]IDFORN[ô], preco:[ô]PRECO[ô] }[Ô],
contentType: [Ô]application/json;charset=utf-8[Ô],
dataType: [Ô]json[Ô],
async: false,
success: function(msg) {
alert([Ô]Funcionou![Ô]);
},
error: function(xhr, ajaxOptions, thrownError) {
alert([Ô]ERRO[Ô] + xhr.responseText);
}
});
}
</script>
2 - Coloque a chamada do método em um botão:
<button type=[Ô]button[Ô] id=[Ô]btnGrava[Ô] onclick=[Ô]Gravar[Ô]>Gravar</button>
KERPLUNK, desculpa a demora...
testei aqui e funcionou, porem da um erro de timeout.
estou a function pelo evento onblur do textbox que esta dentro do gridview :
Private Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
If (e.Row.RowType = DataControlRowType.DataRow) Then
Dim txtpr As TextBox = DirectCast(e.Row.FindControl([Ô]txtPreco[Ô]), TextBox)
Dim cod As Label = DirectCast(e.Row.FindControl([Ô]codigo[Ô]), Label)
ValorProd = txtpr.Text
CodigoProd = cod.Text
txtpr.Attributes.Add([Ô]onfocus[Ô], [Ô]this.select();[Ô])
txtpr.Attributes.Add([Ô]onblur[Ô], [Ô]document.getElementById([ô]TxtCodProd[ô]).value=[Ô] & CodigoProd & [Ô]; document.getElementById([ô]TxtPrec[ô]).value=this.value; Gravar();[Ô])
End If
End Sub
esse é o problema....
mais uma pergunta, posso chamar esta function pelo evento onblur do controle? (minha duvida é se da pau, devido a quantidade de linhas do gridview)
testei aqui e funcionou, porem da um erro de timeout.
estou a function pelo evento onblur do textbox que esta dentro do gridview :
Private Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
If (e.Row.RowType = DataControlRowType.DataRow) Then
Dim txtpr As TextBox = DirectCast(e.Row.FindControl([Ô]txtPreco[Ô]), TextBox)
Dim cod As Label = DirectCast(e.Row.FindControl([Ô]codigo[Ô]), Label)
ValorProd = txtpr.Text
CodigoProd = cod.Text
txtpr.Attributes.Add([Ô]onfocus[Ô], [Ô]this.select();[Ô])
txtpr.Attributes.Add([Ô]onblur[Ô], [Ô]document.getElementById([ô]TxtCodProd[ô]).value=[Ô] & CodigoProd & [Ô]; document.getElementById([ô]TxtPrec[ô]).value=this.value; Gravar();[Ô])
End If
End Sub
esse é o problema....
mais uma pergunta, posso chamar esta function pelo evento onblur do controle? (minha duvida é se da pau, devido a quantidade de linhas do gridview)
Amigo, não te entendi...
ok... escrevi errado....rsrsrsrs
seguinte.. como ja tinha dito tenho um gridview com 5 colunas codprod, descricao, embalagem, qtde, preco (a ultima coluna possui um textbox )
no evento onblur do textbox quero chamar a function (que voce me passou). para gravar os dados no bd.
minha duvida é a seguinte:
posso chama desta forma
Private Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
If (e.Row.RowType = DataControlRowType.DataRow) Then
Dim txtpr As TextBox = DirectCast(e.Row.FindControl([Ô]txtPreco[Ô]), TextBox)
Dim cod As Label = DirectCast(e.Row.FindControl([Ô]codigo[Ô]), Label)
ValorProd = txtpr.Text
CodigoProd = cod.Text
txtpr.Attributes.Add([Ô]onfocus[Ô], [Ô]this.select();[Ô])
txtpr.Attributes.Add([Ô]onblur[Ô], [Ô]document.getElementById([ô]TxtCodProd[ô]).value=[Ô] & CodigoProd & [Ô]; document.getElementById([ô]TxtPrec[ô]).value=this.value; Gravar();[Ô])
End If
End Sub
seguinte.. como ja tinha dito tenho um gridview com 5 colunas codprod, descricao, embalagem, qtde, preco (a ultima coluna possui um textbox )
no evento onblur do textbox quero chamar a function (que voce me passou). para gravar os dados no bd.
minha duvida é a seguinte:
posso chama desta forma
Private Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
If (e.Row.RowType = DataControlRowType.DataRow) Then
Dim txtpr As TextBox = DirectCast(e.Row.FindControl([Ô]txtPreco[Ô]), TextBox)
Dim cod As Label = DirectCast(e.Row.FindControl([Ô]codigo[Ô]), Label)
ValorProd = txtpr.Text
CodigoProd = cod.Text
txtpr.Attributes.Add([Ô]onfocus[Ô], [Ô]this.select();[Ô])
txtpr.Attributes.Add([Ô]onblur[Ô], [Ô]document.getElementById([ô]TxtCodProd[ô]).value=[Ô] & CodigoProd & [Ô]; document.getElementById([ô]TxtPrec[ô]).value=this.value; Gravar();[Ô])
End If
End Sub
Sim, parece estar sintaticamente correto, pode ser chamado assim.
KERPLUNK, bom dia.... obrigado pela aula...rsrsrs.
rachei a cuca aqui... mas concluir o que eu queria.
ja publiquei no servidor e funcionou blz.
agora so tenho um probleminha... talvez vc possa me ajudar (desculpe pela amolaçao)
mas eu nao consegui sozinho.
e o seguinte este script nao funciona no IE8 e mozila (so no crome)
function inserirDados() {
var NUMCOT = document.getElementById(TxtCotacao.id).value;
var IDPROD = document.getElementById(TxtCodProd.id).value;
var IDEMPR = document.getElementById(TxtCodEmpr.id).value;
var IDFORN = document.getElementById(TxtCodForn.id).value;
var PRECO = document.getElementById(TxtPrec.id).value;
}
erro:
Erro em tempo de execução do Microsoft JScript: [ô]TxtCotacao[ô] não está definido
o que pode ser?
rachei a cuca aqui... mas concluir o que eu queria.
ja publiquei no servidor e funcionou blz.
agora so tenho um probleminha... talvez vc possa me ajudar (desculpe pela amolaçao)
mas eu nao consegui sozinho.
e o seguinte este script nao funciona no IE8 e mozila (so no crome)
function inserirDados() {
var NUMCOT = document.getElementById(TxtCotacao.id).value;
var IDPROD = document.getElementById(TxtCodProd.id).value;
var IDEMPR = document.getElementById(TxtCodEmpr.id).value;
var IDFORN = document.getElementById(TxtCodForn.id).value;
var PRECO = document.getElementById(TxtPrec.id).value;
}
erro:
Erro em tempo de execução do Microsoft JScript: [ô]TxtCotacao[ô] não está definido
o que pode ser?
Você já adicionou o JQuery no sua aplicação, então use-o:
Isso se os seus controles forem ASP:TextBox
var NUMCOT = $([Ô]#<%=TxtCotacao.ClientID%>[Ô]).val();
var IDPROD = $([Ô]#<%=TxtCodProd.ClientID%>[Ô]).val();
var IDEMPR = $([Ô]#<%=TxtCodEmpr.ClientID%>[Ô]).val();
var IDFORN = $([Ô]#<%=TxtCodForn.ClientID%>[Ô]).val();
var PRECO = $([Ô]#<%=TxtPrec.ClientID%>[Ô]).val();
Isso se os seus controles forem ASP:TextBox
obrigado mais uma vez....
agradeço de verdade.... pois ajudou muito em minha primeira experiencia com asp.net...
agradeço de verdade.... pois ajudou muito em minha primeira experiencia com asp.net...
Tópico encerrado , respostas não são mais permitidas