c# - org - Enrutamiento ASP.NET con formularios web
mapwindows 5 (6)
No estoy seguro de si esta es su respuesta, pero esto puede llevarlo en la dirección correcta, es Scott Hanselman (MSFT) que muestra cómo obtener ASP.NET WebForms, ASP.NET MVC y ASP.NET Dynamic Data - oh y AJAX para trabajar juntos en armonía.
He leído el enrutamiento ASP.NET ... ¿Adiós a la reescritura de URL? y el uso de enrutamiento con WebForms, que son excelentes artículos, pero limitados a simples ejemplos ilustrativos de "hello world".
¿Alguien está usando el enrutamiento ASP.NET con formularios web de una manera no trivial? ¿Algún problema para tener en cuenta? ¿Problemas de desempeño? ¿Lectura recomendada que debería consultar antes de iniciar una implementación propia?
EDITAR encontró estas URL útiles adicionales:
El otro día vi este podcast vinculado desde el blog de ScottGu, que podría ser útil para ti
La guía paso a paso de Mike Ormond para configurar el enrutamiento de URL con ASP.NET es excelente ( Cómo obtener el enrutamiento y la ejecución de ASP.NET - La guía definitiva )
Dos enlaces muy útiles para el enrutamiento de .NET 4.0 y ASP.net
Puede encontrar el enrutamiento de URL explicado de una manera sencilla en los siguientes artículos. Proporciona información como, enviar solicitud en una ruta, recuperar parámetros de URL en la página de destino, establecer valores predeterminados para los parámetros.
Un ejemplo simple de cómo usar el enrutamiento en ASP.NET
- Crear aplicación web vacía
- Agregar el primer formulario - Default.aspx
- Agregar segunda forma - Second.aspx
- Agregue la tercera forma - Third.aspx
Agregar a los botones default.aspx 3 -
protected void Button1_Click(object sender, EventArgs e) { Response.Redirect("Second.aspx"); } protected void Button2_Click(object sender, EventArgs e) { Response.Redirect("Third.aspx?Name=Pants"); } protected void Button3_Click(object sender, EventArgs e) { Response.Redirect("Third.aspx?Name=Shoes"); }
Leer cadena de consulta en la tercera página
protected void Page_Load(object sender, EventArgs e) { Response.Write(Request.QueryString["Name"]); }
Ahora, si ejecuta el programa, podrá navegar a la segunda y tercera forma. Así es como solía ser. Vamos a agregar enrutamiento.
Agregar nuevo elemento - Global.aspx usando System.Web.Routing;
protected void Application_Start(object sender, EventArgs e) { RegisterRoutes(RouteTable.Routes); } void RegisterRoutes(RouteCollection routes) { routes.MapPageRoute( "HomeRoute", "Home", "~/Default.aspx" ); routes.MapPageRoute( "SecondRoute", "Second", "~/Second.aspx" ); routes.MapPageRoute( "ThirdRoute", "Third/{Name}", "~/Third.aspx" ); }
En default.aspx modificar protected void Button1_Click (object remitente, EventArgs e) {// Response.Redirect ("Second.aspx"); Response.Redirect (GetRouteUrl ("SecondRoute", null)); }
protected void Button2_Click(object sender, EventArgs e) { //Response.Redirect("Third.aspx?Name=Pants"); Response.Redirect(GetRouteUrl("ThirdRoute", new {Name = "Pants"})); } protected void Button3_Click(object sender, EventArgs e) { // Response.Redirect("Third.aspx?Name=Shoes"); Response.Redirect(GetRouteUrl("ThirdRoute", new { Name = "Shoes" })); }
Modificar la carga de la página en third.aspx
protected void Page_Load(object sender, EventArgs e) { //Response.Write(Request.QueryString["Name"]); Response.Write(RouteData.Values["Name"]); }
Ejecute el programa, tenga en cuenta que la URL se ve mucho más limpia: no hay extensiones de archivo (Second.aspx se convierte en Second)
Pasar más de un argumento
agregue un nuevo botón a default.aspx con el siguiente código:
protected void Button4_Click(object sender, EventArgs e) { Response.Redirect(GetRouteUrl("FourthRoute", new { Name = "Shoes" , Gender = "Male"})); }
agregue el siguiente código a global.asax
routes.MapPageRoute( "FourthRoute", "Fourth/{Name}-{Gender}", "~/Fourth.aspx" );
crea la página Fourth.aspx con la siguiente carga de página:
protected void Page_Load(object sender, EventArgs e) { Response.Write("Name is: " + RouteData.Values["Name"] + " and Gender is " + RouteData.Values["Gender"]); }