2011-09-01 118 views
1

我只想问是否有使用masterpage的URL路由的解决方法。我把链接放在我的主页面(即第一个链接是href =“Bookstore/CSS”,另一个链接是href =“tools/toolx”)如果我点击第一个链接,它会将我重定向到正确的url, :2039/Bookstore /但是如果我点击下一个链接,它会将我重定向到localhost:2039/tools/Bookstore/CSS,但链接应该是localhost:2039/Bookstore/CSS。ASP.NET 4.0 webforms在主页面内路由

下面是代码

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"); 
    } 

母版源代码

<div class="page"> 
    <div > 
     <div class="title"> 
      <h1> 
       URL Routing in MAsterpage 
      </h1> 
     </div> 
     <div class="clear hideSkiplink"> 
      <asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false" IncludeStyleBlock="false" Orientation="Horizontal"> 
       <Items> 
        <asp:MenuItem NavigateUrl="~/Default.aspx" Text="Home"/> 
       </Items> 
      </asp:Menu> 
     </div> 
    </div> 
    <div class="clear"> </div> 
    <div style=" width:90%"> 
    <div style="float:left; width:25%;border: 1px solid #009933;"> 
    <br /> 
    <a href="Bookstore/CSS">Click Here to go to bookstore</a>. 
    <div class="clear"> </div> 
    <p> 
     <a href="tools/toolx">Click Here to go to tools</a>. 
    </p> </div> 
    <div style="float:right;width:73%"> 
    <div class="main"> 
     <asp:ContentPlaceHolder ID="MainContent" runat="server"/> 
    </div> 
    </div> 
    </div> 
    </div> 
    <div class="clear"> </div> 
<div class="footer"> 

</div> 

回答

0

在菜单项单击事件设法得到它被点击项目,然后用响应.RedirectToRoute方法。它通过使用您在global.asax页面中指定的路由名称来请求一个新的URL。示例代码: -

protected void NavigationMenu_MenuItemClick(object sender, MenuEventArgs e) 

    { 
     MenuItem item = e.Item; 
     if (item.Text == "Categories") 
     { 
      Response.RedirectToRoute("View Category"); 
     } 
    } 

在全局页提到的 “查看分类” URL路径选择是

public void RegisterRoutes(RouteCollection route) 
    { 
     route.MapPageRoute("View Category", "Categories/All", "~/Views/Categories.aspx"); 
    } 


    void Application_Start(object sender, EventArgs e) 
    { 
     // Code that runs on application startup 
     RegisterRoutes(RouteTable.Routes); 

    }