Existem várias maneiras de se utilizar JavaScript com ASP.NET. A primeira e
mais básica delas é deixar o JavaScript hospedado de maneira estática no
cliente, como por exemplo:
<asp:Button runat="server" ID="btnExcluir"
Text="Excluir" OnClick="btnExcluir_Click"
OnClientClick="javascript:return confirm('Deseja realmente excluir este
registro?');" ToolTip="Excluir" />
Neste caso a validação é feita diretamente no cliente e o código é inserido
de maneira estática, em tempo de design.
Como inserir JavaScript em ASP.NET
dinamicamente?
No Code-behind, do lado servidor, da seguinte forma:
btnExcluir.Attributes.Add("onclick", "javascript:return
confirm('Deseja realmente excluir este registro?');");
Como definir o botão padrão a ser acionado quando a tecla ENTER for
apertada em qualquer parte da página?
Page.Form.DefaultButton = btnCadastrar.UniqueID; // Ou qualquer outro
controle. P.e.: LinkButton, Hyperlink, etc.
Como exibir mensagens Alert em JavaScript
criadas no lado do servidor?
Uma maneira simples seria:
Response.Write("<script>alert('Mensagem gerada pelo
servidor.')</script>");
Este código gera a mensagem em qualquer ponto do código-fonte da página.
Isto não pode ser controlado pelo usuário. Uma maneira de ter este controle
seria utilizar um objeto chamado ClientScript presente em Page da
seguinte forma:
ClientScript.RegisterClientScriptBlock(typeof(string),
string.Empty,
"window.alert(\"" + msg + "\");", true);
Uma maneira de definir que o script seja executado no final da página, ou
seja, que o código seja colocado no final do código-fonte da página,
utilizados:
ClientScript.RegisterStartupScript(typeof(string),
string.Empty,
"window.alert(\"" + msg + "\");", true);
Como monta um conjunto de métodos para exibir mensagens Alert
em JavaScript em qualquer
página da nossa aplicação?
Podemos utilizar uma técnica simples de herança, definindo uma classe que
herde de System.Web.UI.Page e que toda classe herde desta classe
customizada. Sendo assim, toda página na nossa aplicação herdará desta classe e
automaticamente conterá todos os métodos que forem definidos na mesma.
Exemplo:
using System;
using System.Collections;
using System.Configuration;
using System.IO;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Principal : System.Web.UI.Page
{
// Exibe uma mensagem Alert
public void ExibirMensagem(string msg)
{
// Caso haja aspas na mensagem, mudo
para aspas simples
msg =
msg.Replace("\"", "'");
ClientScript.RegisterStartupScript(typeof(string), string.Empty,
string.Format("window.alert(\"{0}\");",
msg), true);
}
// Exibe uma mensagem Alert e força um
post
public void ExibirMensagem(string msg, string url)
{
// Caso haja aspas na mensagem, mudo
para aspas simples
msg = msg.Replace("\"",
"'");
ClientScript.RegisterStartupScript(typeof(string), string.Empty,
string.Format("window.alert(\"{0}\");window.location=\"{1}\";",
msg, url), true);
}
// Exibe uma mensagem Alert e volta n
páginas
public void ExibirMensagem(string msg, int qtd)
{
// Caso haja aspas na mensagem, mudo
para aspas simples
msg =
msg.Replace("\"", "'");
ClientScript.RegisterStartupScript(typeof(string), string.Empty,
string.Format("window.alert(\"{0}\");history.go(-{1});",
msg, qtd), true);
}
// Exibe uma mensagem Alert e
fecha a janela atual
public void ExibirMensagem(string msg, bool fechar)
{
// Se for definido para fechar a
janela
if (fechar)
{
// Caso haja
aspas na mensagem, mudo para aspas simples
msg =
msg.Replace("\"", "'");
ClientScript.RegisterStartupScript(typeof(string), string.Empty,
string.Format("window.alert(\"{0}\");window.close();",
msg), true);
}
}
// Exibe uma mensagem Alert
public static void ExibirMensagem(string msg, Page page)
{
// Caso haja aspas na mensagem, mudo
para aspas simples
msg =
msg.Replace("\"", "'");
page.ClientScript.RegisterStartupScript(typeof(string),
string.Empty,
string.Format("window.alert(\"{0}\");", msg), true);
}
// Exibe uma mensagem Alert e força um post
public static void ExibirMensagem(string msg, string url,
Page page)
{
// Caso haja aspas na mensagem, mudo
para aspas simples
msg =
msg.Replace("\"", "'");
page.ClientScript.RegisterStartupScript(typeof(string), string.Empty,
string.Format("window.alert(\"{0}\");window.location=\"{1}\";",
msg, url), true);
}
// Exibe uma mensagem Alert e volta n páginas
public static void ExibirMensagem(string msg, int qtd, Page
page)
{
// Caso haja aspas na mensagem, mudo
para aspas simples
msg =
msg.Replace("\"", "'");
page.ClientScript.RegisterStartupScript(typeof(string),
string.Empty,
string.Format("window.alert(\"{0}\");history.go(-{1});",
msg, qtd), true);
}
// Exibe uma mensagem Alert e fecha a janela atual
public void ExibirMensagem(string msg, bool fechar, Page
page)
{
// Se for definido para fechar a
janela
if (fechar)
{
// Caso haja
aspas na mensagem, mudo para aspas simples
msg =
msg.Replace("\"", "'");
page.ClientScript.RegisterStartupScript(typeof(string), string.Empty,
string.Format("window.alert(\"{0}\");window.close();",
msg), true);
}
}
}
Defini uma série de sobrecargas do método ExibirMensagem. Às vezes queremos
exibir uma mensagem e forçar um post para uma atualização na página.
Assim, poderíamos utilizar:
ExibirMensagem("Reistro cadastrado com sucesso.",
Request.Url.ToString());
Ou seja, exibimos uma mensagem e forçamos um post para a própria
página, para que um GridView possa ser recarregado, por exemplo. Se
fosse um erro na validação do lado do servidor e houvesse necessidade de manter
os dados com o ViewState como em uma tela de cadastro, por exemplo,
poderíamos utilizar:
ExibirMensagem("Os campos nome, endereço e telefone são
obrigatórios."); // Validação do lado do servidor
Exibindo mensagens em UserControl do
lado do servidor
Se quiséssemos utilizar esta classe em um UserControl utilizaríamos:
Principal.ExibirMensagem("Mensagem UserControl servidor",
this.Page);
Outra maneira seria utilizando Reflection:
this.Page.GetType().GetMethod("ExibirMensagem",
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance,
null, new Type[] { typeof(string) }, null)
.Invoke(this.Page, new object[] { "Os campos nome e e-mail são de
preenchimento obrigatório." });
Nesta classe podemos definir uma série de outros métodos como validações e
outros tipos de utilidades que serão usadas por todas as página na sua
aplicação.
Um abraço e bons códigos!