ASP.NET Web窗体路由歧义

爱尔兰酋长

我有以下顺序的路由规则:

routes.MapPageRoute("Corporate", "Shop/{Category}", "~/Shop.aspx");
routes.MapPageRoute("GiftType", "Shop/{Category}", "~/Shop.aspx");
routes.MapPageRoute("Occasion", "Shop/{Category}", "~/Shop.aspx");
routes.MapPageRoute("Discounted", "Shop/{Category}", "~/Shop.aspx");
routes.MapPageRoute("Featured", "Shop/{Featured}", "~/Shop.aspx");

我正在使用的链接:

<a href="~/Shop/Corporate" title="Corporate Gifts" runat="server">Corporate</a>
<a href="~/Shop/GiftType" title="Shop by Gift Type" runat="server">Gift Type</a>
<a href="~/Shop/Occasion" title="Shop by Occasion" runat="server">Occasion</a>
<a href="~/Shop/Discounted" title="Discounted" runat="server">Discounted</a>
<a href='<%# "~/Shop/"+Eval("Featured") %>' title='<%# Eval("ProductName") %>'
    runat="server"> 

在目标页面后面的代码中,以下代码有效,但我不知道为什么。switch语句针对“ Featured”的个案值为“ True”执行?就像我不是根据占位符将这些路由彼此区分开来吗?

if (Page.RouteData.Values["Category"] != null)
{
    string category = Page.RouteData.Values["Category"].ToString();

    switch (category)
    {
        case ("Corporate"):
            Response.Write("Corporate");
            break;
        case ("GiftType"):
            Response.Write("GiftType");
            break;
        case ("Occasion"):
            Response.Write("Occasion");
            break;
        case ("Discounted"):
            Response.Write("Discounted");
            break;
        // Do not want the following to be picked up here for Category param
        case ("True"):
            Response.Write("Featured");
            break;           
    }
}

我想在代码方面工作是这样的:

    if (Page.RouteData.Values["Category"] != null)
    {
        string category = Page.RouteData.Values["Category"].ToString();

        switch (category)
        {
            case ("Corporate"):
                Response.Write("Corporate");
                break;
            case ("GiftType"):
                Response.Write("GiftType");
                break;
            case ("Occasion"):
                Response.Write("Occasion");
                break;
            case ("Discounted"):
                Response.Write("Discounted");
                break;          
        }
    }
    else if (Page.RouteData.Values["Featured"].ToString() == "True")
    {
        Response.Write("Featured");
    }
迈克·史密斯·德夫

您的类别只需要一条路线:

routes.MapPageRoute("shop-categories", "Shop/{Category}", "~/Shop.aspx");

然后,您可以像以前一样构建URL

<a id="a1" href="<%$ RouteUrl:Category=Discounted,routename=shop-categories%>" title="Discounted" runat="server">Discounted</a>

我想您会希望采用其他路线(为清楚起见),例如

routes.MapPageRoute("featured", "Shop/Featured/{Featured}", "~/Shop.aspx");

和链接(双向):

<a id="A2" href="<%$ RouteUrl:Featured=False,routename=featured%>" title="Featured" runat="server">Featured False</a>
<a id="A3" href="~/Shop/Featured/True" title="Featured" runat="server">Featured True</a>

然后将您的代码隐藏:

if (Page.RouteData.Values["Category"] != null)
{
    //something
}
else if (Page.RouteData.Values["Featured"] != null)
{
    //something
}

建立像我所示的链接的好处是,如果您决定更改路线……您将不会中断任何事情。假设您最终不喜欢URL的外观,/Shop/Featured/而只是希望它是/Featured/,因此您更改了路由:

routes.MapPageRoute("featured", "Featured/{Featured}", "~/Shop.aspx");

现在在上面的示例中,与的链接id="A2"仍然有效,而id="A3"现在断开了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用.NET Core Web API作为ASP.NET Web窗体应用程序的子路由

来自分类Dev

ASP.net Web窗体-动态窗体-C#

来自分类Dev

ASP.NET Web表单中的ASP.Net路由

来自分类Dev

如何全局禁用ASP.NET Web窗体中的缓存

来自分类Dev

从SQL DB for ASP.NET Web窗体API获取数据

来自分类Dev

JavaScript网页上的ASP.NET Web窗体访问控制

来自分类Dev

Mono对ASP.NET Web窗体的支持的未来是什么?

来自分类Dev

ASP.NET Web窗体下拉列表选项innerText

来自分类Dev

Asp.net Web API的按操作名称路由路由

来自分类Dev

ASP.net Web窗体和Asp.net MVC安全

来自分类Dev

使用Web API的ASP.Net Core路由

来自分类Dev

ASP.NET Web Api路由中断

来自分类Dev

ASP.NET MVC Web Api帮助页面路由

来自分类Dev

asp.net Web Api路由不起作用

来自分类Dev

ASP.NET Web API 5.2.3属性路由返回404

来自分类Dev

Asp.Net Mvc Web Api路由404

来自分类Dev

找不到ASP.NET Web API 2属性路由

来自分类Dev

Asp.Net Web Api 2奇怪的路由行为

来自分类Dev

ASP.NET Web Api路由中断

来自分类Dev

ASP.NET Web API 5.2.3属性路由返回404

来自分类Dev

ASP.NET Web Api 2路由

来自分类Dev

ASP.net MVC路由

来自分类Dev

将ASP.NET MVC区域添加到ASP.NET Web窗体现有项目

来自分类Dev

如何将jQuery UI代码添加到ASP.NET Web窗体页面?

来自分类Dev

如何在ASP.NET Web窗体中获取JSON POST数据?

来自分类Dev

在ASP.NET 4.5 Web窗体应用程序中在何处设置OAuth redirect_uri

来自分类Dev

带有JQuery Ajax请求的ASP.NET Web窗体方法失败

来自分类Dev

如何在ASP.NET(Web窗体)中添加标题后缀?

来自分类Dev

基于观察者模式在asp.net Web窗体中实现审核跟踪