GRAVAR DADOS COM AJAX EM ASP.NET

ROBSON220BASS 30/01/2013 12:38:39
#418387
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!
KERPLUNK 30/01/2013 15:01:15
#418421
Resposta escolhida
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:

<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
ROBSON220BASS 30/01/2013 15:38:32
#418429
KERPLUNK,

1º posso publicar direto no servidor (smbatista.net) ou tem que ser local?

2º como chamo este metodo atraves do botao de comando?

KERPLUNK 30/01/2013 15:50:27
#418431
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>

ROBSON220BASS 31/01/2013 16:06:43
#418503
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)

KERPLUNK 31/01/2013 16:54:37
#418510
Amigo, não te entendi...
ROBSON220BASS 31/01/2013 17:18:50
#418515
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

KERPLUNK 31/01/2013 18:10:56
#418526
Sim, parece estar sintaticamente correto, pode ser chamado assim.
ROBSON220BASS 01/02/2013 15:30:56
#418584
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?
KERPLUNK 01/02/2013 15:40:14
#418585
Você já adicionou o JQuery no sua aplicação, então use-o:

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
ROBSON220BASS 01/02/2013 16:17:29
#418592
obrigado mais uma vez....

agradeço de verdade.... pois ajudou muito em minha primeira experiencia com asp.net...
Página 1 de 2 [11 registro(s)]
Tópico encerrado , respostas não são mais permitidas