|
<< Click to Display Table of Contents >> Criando Routes em WebForms |
![]() ![]()
|
Para fazer isso é necessário programar as rotas no Global.asax
O resto é fácil de "carregar" ou "enviar" um identificador através de rota.
Global.asax
<%@ Import Namespace="System.Web.Routing" %>
public static void RegisterRoutes(RouteCollection routes)
{
// default é o nome (tipo um nome de variável - unico)
// Home é o que vai ser escrito no URL (ex: www.site.com.br/Home)
// ~/Default.aspx é pra onde vai ser redirecionado
routes.MapPageRoute("default", "Home", "~/Default.aspx");
// www.site.com.br/Sobre -> www.site.com.br/About.aspx
routes.MapPageRoute("about", "Sobre", "~/About.aspx");
// www.site.com.br/Produto/10 -> www.site.com.br/Produto.aspx?id=10
// observe o {id}, indica que depois de Produto na URL o próximo item será
// identificado como id, e tem um valor default "1" - veja ultimo parâmetros
routes.MapPageRoute("produtos", "Produto/{id}", "~/Produto.aspx", false,
new RouteValueDictionary { { "id", "1" } });
// pode se ter "N" níveis, neste temos categoria também (observe que o idenficador
// unico é "produtos2"
// www.site.com.br/Produto/10/Eletro -> www.site.com.br/Produto.aspx?id=10&categoria=Eletro
routes.MapPageRoute("produtos2", "Produto/{id}/{categoria}", "~/Produto.aspx", false,
new RouteValueDictionary { { "id", "1" }, { "categoria", "nenhuma" } });
}
void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
}
Default.aspx
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br />
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Consulta" />
Default.aspx.cs
protected void Button1_Click(object sender, EventArgs e)
{
Response.RedirectToRoute("produtos", new { id = TextBox1.Text });
// vai abrir: www.site.com.br/Produto/X onde X será o conteúdo do textbox
}
Produtos.aspx
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label><br />
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Retornar" />
Produtos.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
// mostra num label o id recebido, se passar só www.site.com.br/Produto
// o id será 1 conforme definido no padrão nos routes
Label1.Text = Page.RouteData.Values["id"].ToString(); // ATENÇÃO - não é QUERYSTRING
}
protected void Button1_Click(object sender, EventArgs e)
{
// retorna para Default.aspx (conforme a rota) www.site.com.br/Home
Response.RedirectToRoute("default");
}
Seguindo o exemplo acima, se passar num url: www.site.com.br/Produto/10/Celulares
Produtos.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = Page.RouteData.Values["id"].ToString(); // 10
Label2.Text = Page.RouteData.Values["categoria"].ToString(); // Celulares
}
Para mostrar num label direto no aspx as variáveis
<asp:Label runat="server" ID="Label2" Text="<%$RouteValue:id%>" />
<asp:Label runat="server" ID="Label3" Text="<%$RouteValue:categoria%>" />
Para montar o URL numa string
string url = Page.GetRouteUrl("produtos", new { id = 8 }); // = www.site.com.br/Produto/8
Para colocar um componente Hiperlink para apontar para o Home:
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="Home">Home</asp:HyperLink>
Atenção - se no servidor não funcionar, remova e re-adicione o módulo no Web.Config
<system.webServer>
<modules>
<remove name="UrlRoutingModule-4.0" />
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
</modules>
</system.webServer>
Global.asax
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
RouteTable.Routes.MapPageRoute("StoreRoute","BookStore/{Name}","~/Webpages/BookStore/ViewBookDemo.aspx");
RouteTable.Routes.MapPageRoute("mytool", "tools/{Name}","~/tools/tools.aspx");
}
Default.aspx
<a href="<%=GetRouteUrl("StoreRoute", new {Name = "CSS"}) %>">Click Here to go to bookstore</a>.
<a href="<%=GetRouteUrl("mytool", new {Name = "toolx"}) %>">Click Here to go to tools</a>.