Proyecto web: 111121PuenteASPNETyPHP
Código del Default:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<!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 id="Head1" runat="server">
<title></title>
<script type="text/javascript">
// Se abre una zona de javascript (nada que ver con Java. Es C (C++)
function OpenTag() {
window.open("http://www.as.com");
return false;
}
function OpenWin() {
var w = window.open()
w.opener = null;
w.document.location = "http://www.marca.com";
// w.close; -> si quisiesemos cerrar la ventana
return false;
}
// Ejemplo de funcion de comunicacion. Es una funcion que recibe dos parametros
// y los manda como argumentos a una pagina php.
function puentePHP(producto,articulo) {
var enlace = "http://www.chorradas.com/datos.php?idproducto=" + producto +
"&articulo=" + articulo;
window.open(enlace, "miventana","scrollbars=no,resizable=no,width=400,height=200");
return false;
}
function retroceder() {
// Retrocede una página
history.go(-1);
return false;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="javascript:return OpenTag()" />
<asp:Button ID="Button2" runat="server" Text="Button" />
<asp:Button ID="Button3" runat="server" Text="Button" />
<asp:LinkButton ID="LinkButton1" runat="server">LinkButton</asp:LinkButton>
<asp:Button ID="Button4" runat="server" Text="Button"
onclientclick="javascript:return OpenWin()" />
</div>
<a href="http://www.as.com" target="_newTab" rel ="noreferrer"> Voy al As </a>
<br />
<br />
<asp:Button ID="Button5" runat="server" Text="Button" />
<asp:Button ID="Button6" runat="server" Text="Button" />
</form>
</body>
</html>
En la propia página:
Partial Class _Default
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
' Metodo que se ejecuta al cargar la pagina.
' Le añadimos secuencias de javascript a Button2
Me.Button2.Attributes.Add("onclick", "javascript:return OpenWin();")
Me.Button3.Attributes.Add("onclick", "javascript:return puentePHP(10,20);")
Me.Button6.Attributes.Add("onclick", "javascript:return retroceder();")
End Sub
Protected Sub Button5_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button5.Click
'Genera html desde ASP.NET
Response.Write("<a href='http://www.as.com' target ='_blank'> Ir al As </a>")
' History.go() 'Retrocede a la página anterior.
' History.go(-2) 'Retrocede 2 páginas.
End Sub
End Class
Como adaptar totalmente el sistema a las necesidades de nuestro cliente. Hoy hay muchas notas que iremos completando.
Creamos un uevo sitio web (no vacío) con framework 4.0: 111118AdaptarSistema
Tendremos 2 tablas: una que gestionamos nosotros…
Para alojar el sitio web, la cadena de conexión está aquí (en WEB CONFIG).
<?xml version="1.0" encoding="utf-8"?>
<!--
Para obtener más información sobre cómo configurar la aplicación de ASP.NET, visite
http://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>
<connectionStrings>
<add name="ApplicationServices"
connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true"
providerName="System.Data.SqlClient" />
</connectionStrings>
Está al principio de todo. Al modificar esto ya se cambia el alojamiento (para pasarlo al 1and1).
Para acceder a esas tablas.
Si la cadena no aparece en el webcong del 3.5, se copian todos los perfiles, se modifican y se pegan.
Hoy hemos creado las páginas de Alta de Clientes y Alta de Proveedores. Lo hicimos a través de una tabla donde introducimos un FormView (podría servir cualquier otro).
Se desea buscar un Cliente por NIF (por ejemplo). Como otras veces, en el el DataSource, en el WHERE señalamos el NIF, LIKE, CONTROL (en un textbox que añadimos en la fila de abajo) y el %.
Para evitar que recargue la página al darle al BOTÓN (un botón, por defecto, activa el POSTBACK) [ver más datos aquí].
También el programa debe detectar si la página es un reenvío. Lo recordamos de otras veces:
Partial Class Altas_Clientes
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
'Código que se ejecuta si la página no es reenvío.
'Esto se puede hacer en cualquier lugar.
End If
End Sub
End Class
Pueden aparecer otros errores no controlados. Para ello debemos realizar una modificaciones en Webconfig. Habilitamos la siguiente parte que está en comentarios:
Lo habilitamos.
<customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
<error statusCode="403" redirect="NoAccess.htm" />
<error statusCode="404" redirect="FileNotFound.htm" />
<error statusCode="" redirect="FileNotFound.htm" />
</customErrors>
Debemos crear ErrorDatos.aspx. Después modificamos lo siguiente Global.axa:
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
' Código que se ejecuta al producirse un error no controlado
Response.Redirect("~/Altas/ErrorDatos.aspx")
End Sub
A partir de entonces debería ser cuando se atacan los eventos en la introducción de datos que vimos en el post anterior y en su posterior documento. Más datos de este post, aquí.
Pondremos en esta sección distintas aplicaciones útiles que hemos aprendido en la creación de una página web a través de ASP.NET.
El programa está bastante avanzado. Iremos introduciendo temas sueltos.
Hemos insertado en nuestra página aspx un FormView. Tiene varios eventos asociados a la introducción de datos. Se trata de UPDATED, INSERTING y UPDATING. Los eventos terminados en -ED hacen referencia a una vez que se han actualizado los datos. Por ese motivo disponen de los datos antiguos (OldValues) y los nuevos (NewValues). Los terminados en –ING sólo disponen de los OldValues.
En este doc detallamos algunos comentarios sobre las distintas pruebas que hicimos.
Importante: Para el caso de la introducción correcta de los correos electrónicos hicimos uso del “método científico” (siempre se debería hacer de este modo). Pueden verse los códigos en: http://msdn.microsoft.com/es-es/library/bb932288.aspx
If Regex.IsMatch(e.NewValues.Item(8).ToString.Trim, "^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$") = False Then
Me.Label3.Text = "EMAIL incorrecto".Length
e.Cancel = True
End If
End Sub