Programação para Internet Avançada 3. Desenvolvimento de Aplicações Web com ASP.net Nuno Miguel Gil Fonseca [email protected] Desenvolvimento de Aplicações Web com ASP.net ASP.net? Tecnologia de servidor que pode ser implementada através das linguagem de programação VB.NET ou C# Documentos escritos em HTML, no seio do qual se insere código ASP.NET Vantagens: Performance Ferramentas/Classes Flexibilidade Simplicidade Maneabilidade Escalabilidade e Disponibilidade Personalização e Extensibilidade Segurança (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 2 Desenvolvimento de Aplicações Web com ASP.net ASP.net? O que acontece quando um cliente (browser) invoca um recurso O ASP.NET runtime analisa e compila o ficheiro numa classe .NET Esta classe é usada para processar de forma dinâmica os vários pedidos O ficheiro .aspx é compilado somente na primeira vez que é invocado Se forem feitas alterações ao ficheiro .aspx, este será novamente compilado apenas na primeira vez que voltar a ser acedido (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 3 Desenvolvimento de Aplicações Web com ASP.net ASP.net? Exemplo de um ficheiro .aspx <html> <body> <form action="Primeira.aspx" method="post" ID="Form1"> Category: <select id="Category" size="1" NAME="Category"> <option>psychology</option> <option>business</option> <option>popular_comp</option> </select> <input type="submit" value="Lookup" ID="Submit1" NAME="Submit1"> </form> </body> </html> (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 4 Desenvolvimento de Aplicações Web com ASP.net Controlos de servidor Existem diversos controlos que podem ser usados em alternativa aos comuns elementos de HTML Estes são declarados no ficheiro .aspx Exemplos: <asp:textbox runat=“server”> <asp:dropdownlist runat=“server”> <asp:button runat=“server”> No momento da execução, estes server controls geram automaticamente código HTML (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 5 Desenvolvimento de Aplicações Web com ASP.net Controlos de servidor Em ASP.net as tags HTML são substituídas por controlos de servidor: HTML Possibilidade de programação e alteração dinâmica dos valores dos seus atributos Permite manipular dinamicamente o aspecto e as funcionalidades da página WEB Apresentam funcionalidades não disponíveis nos controlos HTML Ex: Validação (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 6 Desenvolvimento de Aplicações Web com ASP.net Controlos de servidor HTML HtmlAnchor HtmlButton HtmlForm HtmlGenericControl HtmlImage HtmlInputButton (Button) HtmlInputButton (Reset) HtmlInputButton (Submit) HtmlInputCheckBox HtmlInputFile HtmlInputHidden HtmlInputImage HtmlInputRadioButton HtmlInputText (Password) HtmlInputText (Text) HtmlSelect HtmlTable HtmlTableCell HtmlTableRow HtmlTextArea A sintaxe dos controlos HTML é semelhante à das tags HTML correspondentes, mas adicionalmente: incluem sempre um atributo runat=“server”; incluem o atributo id que permite que sejam referenciadas no programa. (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 7 Desenvolvimento de Aplicações Web com ASP.net Controlos de servidor HTML Exemplos <img id="imagem1" src="imagem1.gif" runat="server"> <input id="caixa1" type="text" runat="server"> <input id="chave1" type="password" runat="server"> <input id="radio1" type="radio" runat="server">radio1 <select runat="server"> <option>opção1</option> <option>opção2</option> </select> <input id="ficheiro1" type="file" runat="server"> <input type="submit" value="Enviar" runat="server"> (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 8 Desenvolvimento de Aplicações Web com ASP.net Controlos de servidor WEB AdRotator Button Calendar CheckBox CheckBoxList DataGrid DataList DropDownList Image ImageButton CompareValidator CustomValidator RangeValidator RegularExpressionValidator RequiredFieldValidator ValidationSummary Label LinkButton ListBox HyperLink Panel PlaceHolder RadioButton RadioButtonList Repeater Table TableCell TableRow TextBox XML Sintaxe semelhante à dos controlos HTML Prefixo “<asp" (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 9 Desenvolvimento de Aplicações Web com ASP.net Controlos de servidor WEB Exemplos asp:button asp:checkbox asp:dropdown asp:hyperlink asp:image asp:imagebutton asp:label asp:listbox asp:radiobutton asp:table asp:textbox (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 10 Desenvolvimento de Aplicações Web com ASP.net Controlos de servidor WEB Controlos de validação de formulários CompareValidator Compara um campo com um valor CustomValidator Controlo de validação criado pelo programador RangeValidator Verifica que o valor se encontra dentro dos limites RegularExpressionValidator Valida recorrendo a expressões regulares RequiredFieldValidator Verifica se o campo está preenchido ValidationSummary Apresenta um resumo dos resultados das validações (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 11 Desenvolvimento de Aplicações Web com ASP.net Controlos de servidor WEB Controlos de validação de formulários Sintaxe <asp:tipo_de_validacao id="idControloValidacao" runat="server" ControlToValidate="id_controlo_a_validar" ErrorMessage="mensagem de erro" Text="texto a apresentar pelo controlo em caso de erro"> </asp:tipo_de_validacao> (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 12 Desenvolvimento de Aplicações Web com ASP.net Controlos de servidor Cada controlo de servidor possui Propriedades Métodos Eventos Exemplo de resposta a um evento <script language="C#" runat="server"> void SubmitBtn_Click(Object sender, EventArgs e) { Menssagem.Text = "Olá" + CaixaDeTexto.Text; } </script> … <form runat="server"> <asp:TextBox ID="CaixaDeTexto" runat="server"></asp:TextBox> <asp:Label ID="Mensagem" runat="server"></asp:Label> <asp:button text="Lookup" OnClick="SubmitBtn_Click" runat="server"/> </form> (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 13 Desenvolvimento de Aplicações Web com ASP.net Web Applications Um dos principais aspectos a ter em conta aquando do desenvolvimento de uma web application diz respeito ao facto de esta se dever comportar tanto quanto possível com uma aplicação stand-alone. Por omissão o processamento de um formulário é feito no mesmo ficheiro em que este é criado, tal pode originar alguns problemas… Imagine-se por exemplo que pretendemos fazer alguma operação apenas aquando do acesso inicial à página (ou seja não queremos que essa operação quando o formulário é submetido…) Podemos usar para tal o evento Page_Load (que é executado sempre que a página é carregada) e a propriedade IsPostBack que indica se a página é resultante de um recarregamento (true) ou se se trata do acesso inicial à página (false). (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 14 Desenvolvimento de Aplicações Web com ASP.net Web Applications protected void Page_Load(object sender, EventArgs e){ if (Page.IsPostBack==false){ // Faz qualquer coisa se for o acesso inicial } } (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 15 Desenvolvimento de Aplicações Web com ASP.net Web Applications Separação do código Uma característica do ASP.net é a separação do código em dois ficheiros diferentes NomeDoFicheiro.aspx Contém HTML e ASP.NET, para a interface gráfica NomeDoFicheiro.aspx.cs Contém C#, para código que confere as funcionalidades à interface Vantagens: Separação entre o HTML e o código, permitindo que o trabalho do designer não interfira com o do programador Facilidade de manutenção e reutilização do código Protecção do código contra cópia O primeiro ficheiro invoca o segundo através da directiva: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 16 Desenvolvimento de Aplicações Web com ASP.net Web Applications Separação do código <%@ Page Language="C#" Inherits="mensagem" src="codigo.aspx.cs" %> <html> <head></head> <body> <form runat="server"> <asp:textbox id="txtMensagem" runat="server"/> <asp:button id="botaoMensagem" text="Enviar" onClick="enviar" runat="server"/> <asp:label id="lblMensagem" runat="server"/> </form> </body> // ficheiro codigo.aspx.cs </html>using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; public class mensagem : Page { public Label lblMensagem; public TextBox txtMensagem; public void enviar (System.Object sender, System.EventArgs e) { lblMensagem.Text = "A mensagem é: " + txtMensagem.Text; } } (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 17 Desenvolvimento de Aplicações Web com ASP.net Web Applications Master pages De modo a facilitar a interacção designers/programadores em ASP.net existe a possibilidade de usar templates de páginas: Master pages. Nas master pages define-se a estrutura gráfica do site, permitindo definir zonas de conteúdo dinâmico (os Content Place Holders) Caso se pretenda usar uma master page, aquando da criação do Web form deve logo dizer-se qual a master page a ser usada… Uma master page poderá ter diversos Content Place Holders Uma aplicação poderá ter várias master pages, no entanto num web form só pode ser usada uma master page (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 18 Desenvolvimento de Aplicações Web com ASP.net Web Applications Master pages Master page <%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <asp:contentplaceholder id="CPH1" runat="server"></asp:contentplaceholder> </form> </body> <%@ Page Language="C#" MasterPageFile="~/MasterPage.master" </html> AutoEventWireup="true" CodeFile="Default6.aspx.cs" Inherits="Default6" Title="Untitled Page" %> <asp:Content ID="Content1" ContentPlaceHolderID="CPH1" Runat="Server"> Web form ém Aqui fica só ó código respeitante ao conteúdo... não se incluem as tags que é usada body, head,html,... uma vez que essas já foras definidas na master page. a master page </asp:Content> (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 19 Desenvolvimento de Aplicações Web com ASP.net Web Applications Variáveis de aplicação Por vezes é necessário ter variáveis que persistam durante toda a “vida” de uma aplicação, como por exemplo o número de visitantes da aplicação… Nestes casos recorre-se às variáveis de aplicação, que após criadas, são válidas enquanto a aplicação estiver “viva” (ou seja, enquanto estiver a correr no servidor) Este tipo de variáveis têm ainda a característica de estarem disponíveis para todos os utilizadores // criar variável Application.Add("nomeVar", "Carlos"); // alterar valor Application.Set("nomeVar","Joaquim"); // obter valor Label.Text = Application.Get("nome").ToString(); (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 20 Desenvolvimento de Aplicações Web com ASP.net Web Applications Application State Como é sabido, no desenvolvimento de páginas web, ao contrário de aplicações stand-alone, as variáveis criadas numa determinada página só estão disponíveis para essa página; Tal facto é limitativo, uma vez que há a necessidade de, por exemplo, saber o valor que estava anteriormente para fazer comparações com o valor actual… A esta capacidade de guardar valores que persistam durante mais do que uma iteração dá-se o nome de estado da aplicação (application state). (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 21 Desenvolvimento de Aplicações Web com ASP.net Web Applications Application State Existem várias formas de implementar este conceito de estado da aplicação: ViewSate Neste caso, o valor das variáveis que pretendemos que persistam segue codificados num campo escondido juntamente com o código html da página. <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTkwMjg4NjgzM2QYAQUeX19D b250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgEFLmN 0bDAwJE1haW4kY3RsMDgkY3RsMDIkY3RsMDIkY3RsM DIkY2hrUmVtZW1iZXItrG0oEOGpt+RTvZtP/1ZCJkLJ5A==" /> Adicionar uma variável/valor ao ViewState: ViewState["Text"] = value; Obter o valor de uma variável do ViewState: string valor = (string)ViewState["Text"]; (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 22 Desenvolvimento de Aplicações Web com ASP.net Web Applications Application State Existem várias formas de implementar este conceito de estado da aplicação: ViewSate (cont.) Os valores do ViewState são guardado numa estrutura de dados semelhante a uma Hashtable… o stateBag. A estrutura stateBag para além de guardar os valores, permite igualmente saber de uma forma simplificada se os valores sofreram alguma alteração desde a última vez que foi chamado método stateBag.TrackViewState(), através do método IsItemDirty stateBag["key"] = "abc"; stateBag.IsItemDirty("key"); // false stateBag.TrackViewState(); stateBag["key"] = "acb"; stateBag.IsItemDirty("key"); // true Uma vez que os valores seguem junto com o HTML em todas as páginas da aplicação, o ViewState deve ser usado com alguma moderação (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 23 Desenvolvimento de Aplicações Web com ASP.net Web Applications Application State Existem várias formas de implementar este conceito de estado da aplicação: Variáveis de sessão Esta é eventualmente a forma mais conhecida para implementar o application state.. As variáveis persistem desde o momento em que são criadas, até o browser ser encerrado, após um período de inactividade de x minutos (20/30) ou até serem destruídas pela aplicação... (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 24 Desenvolvimento de Aplicações Web com ASP.net Web Applications Application State Existem várias formas de implementar este conceito de estado da aplicação: Variáveis de sessão (cont.) Adicionar valores à sessão Session.Add("var", "valor"); Obter valor de uma variável da sessão string v = Session["valor"].ToString(); Remover variável da sessão Session.Remove("var"); Obter o identificador da sessão string sid = Session.SessionID; (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 25 Desenvolvimento de Aplicações Web com ASP.net Web Applications Application State Existem várias formas de implementar este conceito de estado da aplicação: Profile Com o objecto profile é possível definir state variables que podem ser usadas como variáveis “normais” e não como valores guardados numa estrutura de variáveis (ex. ViewState, Session) Para poderem ser utilizadas, as variáveis do objecto Profile, têm que ser definidas no ficheiro Web.config. ... <profile enabled="true"> <properties> <add name="nomeVar" allowAnonymous="true"/> <add name="nomeVarNumerica" allowAnonymous="true" type="System.Int"/> </properties> </profile> ... Profile.nomeVar = "Gil"; labelNome.Text = Profile.nomeVar; (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 26 Desenvolvimento de Aplicações Web com ASP.net Web Applications Autenticação e autorização Em ASP.net existe um conjunto de classes/métodos que permite suportar o controlo de acesso a recursos, criação/edição de utilizadores, etc. Baseado nos conceitos: Autentication Verificar se a pessoa é quem diz ser. Implementado através da validação de um par username/password Authorization Verificar se a pessoa tem permissão para executar o recurso pretendido Implementado através da verificação de associação a determinadas funções (Roles) (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 27 Desenvolvimento de Aplicações Web com ASP.net Web Applications Autenticação e autorização Com a plataforma .NET é possível usar um conjunto de tabelas de base de dados pre-definidas para guardar toda a informação referente a autenticação e autorização. Para usar estas funcionalidades, basta: Executar o “Web-Site ASP Configuration”; Escolher a opção “Segurança”; Seleccionar o tipo de autenticação (A partir da Internet) E poderá imediatamente adicionar um utilizador… Serão automaticamente criadas todas as tabelas necessárias para o processo de autenticação e autorização Os controlos disponíveis são: Login, LoginView, LoginStatus, PasswordRecovery, LoginName, ChangePassword, … (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 28 Desenvolvimento de Aplicações Web com ASP.net Web Applications Autenticação e autorização Quem não pretender usar esses controlos, mas pretender usar as tabelas de base de dados, poderá usar os métodos da classe Membership para programar manualmente as funcionalidades de inserir, alterar, remover utilizadores, validar dados dos utilizadores, … Membership.CreateUser Membership.UpdateUser Membership.DeleteUser Membership.GetAllUsers Membership.GetUser Membership.FindUserByEmail Membership.FindUserByName ... Para ver se quem está a aceder à página está autenticado: if(User.Identity.isAuthenticated == false) Response.Redirect("Login.aspx"); (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 29 Desenvolvimento de Aplicações Web com ASP.net Web Applications Membership É ainda possível usar o mecanismo de perfis (ou funções ou roles) disponibilizados pela plataforma. Para activar essa funcionalidade, é necessário: Executar o “Web-Site ASP Configuration”; Escolher a opção “Segurança”; Seleccionar a opção “Activar Funções” Inserir uma função Posteriormente, pode associar os utilizadores à função criada (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 30 Desenvolvimento de Aplicações Web com ASP.net Web Applications Membership Quem pretender manualmente adicionar/ remover utilizadores das funções tem à sua disponibilidade os seguintes métodos Roles.GetAllRoles Roles.AddUserToRole Roles.IsUserInRole Roles.RemoveUserFromRole Roles.GetRolesForUser Para verificar se o utilizador autenticado está associado a uma determinada função (assumindo que existe uma função chamada Administrador)… if(Roles.IsUserInRole("Administrador")==false) Response.Redirect("NoPermissions.aspx"); (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 31 Desenvolvimento de Aplicações Web com ASP.net Web Applications Aceder a parâmetros no querystring (no endereço) http://www.xpto.pt?valor=123 valor=Request["valor"].ToString(); Construir um endereço com parâmetros Tanto os valores como o texto pode vir de uma base de dados ou de outra qualquer fonte… ... <asp:hyperlink id="HyperLink1" runat="server" NavigateUrl=""></asp:hyperlink> ... ... HyperLink1.NavigateUrl = "sm.aspx?valor1=" + 1 + "&valor2=" + 2; HyperLink1.Text = "Texto do hyperlink"; ... (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 32 Desenvolvimento de Aplicações Web com ASP.net Web Applications Globalização Globalizar uma aplicação significa torná-la global, ou seja, poder ser utilizado globalmente… por toda a gente… Em termos práticos, significa que uma aplicação esteja disponível em diferentes línguas (as labels, as mensagens de erro/sucesso, os diálogos, etc.) Como é óbvio, não vamos fazer uma versão do nosso site para cada língua, em vez disso, podemos tomar algumas medidas que nos permitam tornar a nossa aplicação disponível em virtualmente qualquer língua do mundo. Neste caso concreto, vamos apenas concertar-nos na globalização da aplicação em “si”… (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 33 Desenvolvimento de Aplicações Web com ASP.net Web Applications Globalização A disponibilização de conteúdos em várias línguas não está pois abrangida, mas tal processo implica geralmente a inclusão de diversas tabelas de base de dados adicionais para albergar os dados em outras línguas… Podemos fazer a globalização ficheiro a ficheiro, ou então criar um ficheiro de recursos globalizáveis para toda a aplicação Ficheiro a ficheiro Começamos por adicionar um novo item “Resource file” à directoria “App_Local Resources”. O nome a dar ao Resource file deve ser igual ao nome do ficheiro aspx que pretendemos globalizar mais “.resx”. Exemplo: Default.aspx.resx Ao clicarmos no ficheiro .resx podemos editar o nosso resource file. (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 34 Desenvolvimento de Aplicações Web com ASP.net Web Applications Globalização (cont.) Ficheiro a ficheiro (cont.) No atributo “Name” colocamos o recurso que pretendemos globalizar Exemplo: labelNome.Text No atributo “Value” colocamos o valor que esse atributo irá assumir Exemplo: Nome Repete-se este processo para todos os recursos que pretendermos globalizar. Caso queiramos criar ficheiros em outras línguas, devemos criar um Resource file com o mesmo nome que o que foi criado por defeito, mas com uma pequena alteração Exemplo: Default.aspx.it.resx, Default.aspx.fr fr.resx O ficheiro no qual não é definida a língua é considerado o ficheiro a apresentar por omissão (neste caso, Default.aspx.resx) (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 35 Desenvolvimento de Aplicações Web com ASP.net Web Applications Globalização (cont.) Ficheiro a ficheiro (cont.) No ficheiro .aspx, no recurso a ser globalizado temos que inserir informação retirar a propriedade Text e incluir: <asp:Label ID="labelNome" runat="server" meta:resourceKey="labelNome"> </asp:Label> Finalmente, ainda no ficheiro .aspx devemos adicionar informação sobre a língua a ser utilizada por defeito <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Culture="auto:ptPT" UICulture="auto"%> Importa referir, que a informação sobre qual língua que está a ser usada é obtida através das propriedades do browser (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 36 Desenvolvimento de Aplicações Web com ASP.net Web Applications Globalização (cont.) Global a toda a aplicação No caso de se pretender criar um Resource file global para toda a aplicação, cria-se um ficheiro chamado myResources.resx, por exemplo, na pasta App_GlobalResources Resource files para outras línguas ficaram com o nome myResources.fr.resx, etc… Para adicionar os valores procede-se de forma semelhante à explicada anteriormente (ex. Name = lNome, Value=Nome) Para usar os valores definidos no Resource file, faz-se: <asp:Label ID="lblNome" runat="server" Text="<%$ Resources:myResources, lNome %>"> </asp:Label> É igualmente necessário definir os valores para Culture e UICulture como apresentado no slide anterior… Também se pode proceder deste modo para definir recursos locais (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 37 Desenvolvimento de Aplicações Web com ASP.net Web Applications Acessos à DB Assume nos seguintes exemplos que o utilizador já possui uma variável chamada ConnectionString que representa a string de ligação à BD Exemplo de uma string de ligação Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\ASPNETDB.MDF;Integrated Security=True;User Instance=True (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 38 Desenvolvimento de Aplicações Web com ASP.net Web Applications Acessos à DB SELECT try{ SqlDataSource ds = new SqlDataSource(); ds.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString(); ds.SelectCommand = "SELECT [nome] FROM [NomeTabela] WHERE [id] = @v1;"; ds.SelectParameters.Add("v1", label Name.Text.ToString()); DataView dw = (DataView)ds.Select(DataSourceSelectArguments.Empty); foreach (DataRow dr in dw.Table.Rows){ foreach (DataColumn dc in dw.Table.Columns){ Label2.Text = dr[dc.ToString()].ToString(); } Label2.Text += "\r\n"; } }catch (Exception de){ Label2.Text = "Ocorreu um erro a processar o pedido.\n\n" + de.ToString(); } (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 39 Desenvolvimento de Aplicações Web com ASP.net Web Applications Acessos à DB INSERT try{ SqlDataSource ds = new SqlDataSource(); ds.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString(); ds.InsertCommand = "INSERT INTO [NomeTabela] ([nome]) VALUES (@v1);"; ds.InsertParameters.Add("v1", labelName.Text.ToString()); ds.Insert(); } catch (Exception de) { Label2.Text = "Ocorreu um erro a processar o pedido.\n\n" + de.ToString(); } Label2.Text = "Novo registo inserido correctamente!"; (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 40 Desenvolvimento de Aplicações Web com ASP.net Web Applications Acessos à DB UPDATE try{ SqlDataSource ds = new SqlDataSource(); ds.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString(); ds.UpdateCommand = "UPDATE [NomeTabela] SET [nome] = @v1 WHERE [id] = 1;"; ds.UpdateParameters.Add("v1", formName.Text.ToString()); ds.Update(); }catch (Exception de){ Label2.Text = "Ocorreu um erro a processar o pedido.\n\n" + de.ToString(); } Label2.Text = "Registo alterado correctamente!"; (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 41 Desenvolvimento de Aplicações Web com ASP.net Web Applications Acessos à DB DELETE try{ SqlDataSource ds = new SqlDataSource(); ds.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString(); ds.DeleteCommand = "DELETE FROM [NomeTabela] WHERE [id] = @v1;"; ds.DeleteParameters.Add("v1", formName.Text.ToString()); ds.Delete(); }catch (Exception de){ Label2.Text = "Ocorreu um erro a processar o pedido.\n\n" + de.ToString(); } Label2.Text = "Registo apagado correctamente!"; (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 42 Desenvolvimento de Aplicações Web com ASP.net Web Applications Vários Obter o endereço completo da directoria do ficheiro aspx que está a ser executado Server.MapPath("."); Com alguns “..” e “/” é possível saber as directorias de todos os ficheiros do Website (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet Avançada 43