加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – asp.net webforms路由无法正常工作

发布时间:2020-12-16 02:00:59 所属栏目:百科 来源:网络整理
导读:假设我的分层网址或友好网址如下所示,并且由于与它们相关联的不同设计或形式,一些页面具有不同的页面处理程序 www.abc.com/personalwww.abc.com/personal/acounts-depositswww.abc.com/personal/acounts-deposits/current-accountwww.abc.com/personal/acoun
假设我的分层网址或友好网址如下所示,并且由于与它们相关联的不同设计或形式,一些页面具有不同的页面处理程序

www.abc.com/personal
www.abc.com/personal/acounts-deposits
www.abc.com/personal/acounts-deposits/current-account
www.abc.com/personal/acounts-deposits/current-gold-account
www.abc.com/personal/acounts-deposits/easy-saver-ac
www.abc.com/personal/acounts-deposits/fixed-account
www.abc.com/loans
www.abc.com/loans/personal-loans
www.abc.com/loans/car-loans

我的数据库结构包含样本数据如下所示

Page_ID     Page_Name               Page_url                                    Page_Handler        Parent_Page_ID
1           Home                    home                                        index.aspx              0               
2           Personal                personal                                    Personal.aspx           0               
3           Accounts & Deposits     personal/acounts-deposit                    Personal.aspx           2               
4           Current Account         personal/acounts-deposit/current-account    Personal.aspx           3               
5           Current Gold Accounts   personal/acounts-deposit/gold-account       gold-account.aspx       3               
6           Easy Saver              personal/acounts-deposit/easy-saaver-ac     Personal.aspx           3               
7           Fixed Deposits          personal/acounts-deposit/fixed-account      fixed-account.aspx      3               
8           Loans                   loans                                       loans.aspx              0               
9           Personal Loans          loans/personal-loans                        loans.aspx              8               
10          car Loans               car-loans                                   car-loan.aspx           8

在我的Menu_Table中,我可以通过Page_url识别页面,因为它是唯一的.

routes.MapPageRoute("Personal_Route","en/{*path}","~/en/personal.aspx",false,new RouteValueDictionary {
                    { "path","Page-not-found" },{ "PageName","Page-not-found" }
                });


    routes.MapPageRoute("Personal_Route2","~/en/gold-account.aspx","Page-not-found" }
                });

    routes.MapPageRoute("Personal_Route2","~/en/fixed-account.aspx","Page-not-found" }
                });

上面的路由代码默认使用第一个路由personal.aspx作为所有URL的处理程序

我已经尝试了很长一段时间,但我无法做到正确,我会很感激这方面的帮助,以便每个页面都由基于Page_url的正确页面处理程序处理

我想通过页面处理程序将页面作为处理程序,如下所示

www.abc.com/personal  ----  (Personal.aspx)
www.abc.com/personal/acounts-deposits -----(Personal.aspx)
www.abc.com/personal/acounts-deposits/current-account -----(Personal.aspx)
www.abc.com/personal/acounts-deposits/current-gold-account ----- (gold-account.aspx)
www.abc.com/personal/acounts-deposits/easy-saver-ac -----(Personal.aspx)
www.abc.com/personal/acounts-deposits/fixed-account ----- (fixed-account.aspx(
www.abc.com/loans ----- (loans.aspx) 
www.abc.com/loans/personal-loans ----- (loans.aspx)
www.abc.com/loans/car-loans ----- (car-loan.aspx)

解决方法

我不确定你的方法是否正确.让我解释一下:

在您的情况下,您使用相同的配置映射您的路径

routes.MapPageRoute("Personal_Route","en/{*path}"
  routes.MapPageRoute("Personal_Route2","en/{*path}"

等等.

这些路线中的每一条都将绝对匹配您的申请的所有请求

要实现目标,最好以这种方式进行映射:

//Take care to the sequensce of routes becuase if you will use route 
 //"personal" before route "account" and you will receive a request to
 //"http://domain.com/personal/somethinghere route account will match 
 //"en/personl/ and will proceed to redirect to "personal" destination 
 routes.MapPageRoute("account","en/personal/{q}/" ...........
 routes.MapPageRoute("personal","en/personal" ............


 //Same as above 
 routes.MapPageRoute("loancar","en/loan/{q}" .........
 routes.MapPageRoute("loan","en/loan"

现在,当您正确创建和选择路线时,您可以通过简单的方式访问参数,并选择适合特定情况的操作,例如:

protected void Page_Load(object sender,EventArgs e)
    {
        if (Page.RouteData.Values.ContainsKey("q"))
        {
            if (Page.RouteData.Values["q"] !=null)
            {
                string p = (string)Page.RouteData.Values["q"];
                switch (p)
                {
                    case "a":
                        //do something
                    case "b":
                    //do something
                    case "c":
                        // Do Something
                        break;
                    case "d":
                        // Do Something
                        break;
                    default:
                        // Do Something
                        break;
                }
            }
        }
    }

现在,您必须对数据库进行一些小的更改,您只需在网址的最后一页填写它.

请注意如何映射它是非常重要的…..我已经向您展示了一个简单的例子,只有“静态路由”(个人)和动态路由只有一个名为path的参数.有很多方法可以通过更好的粒度来实现您的目标,这些都取决于您的需求.我希望它对您有所帮助.

更新:
您不必创建所有路线,您只需创建所需的顶级路线,然后您需要为每个部分创建或新页面,或使用multiwiex控制器在多个部分中拆分页面,以便显示正确的内容在示例中,如果您有个人页面用于显示页面的2/3/4部分,则可以使用多视图控件,该控件取决于{q}参数,然后使用此处的开关案例:

switch (p)
                {
                    case "a":
                        //do something
                        multiview.ActiveViewIndex=0
                    case "b":
                    //do something
                        multiview.ActiveViewIndex=1
                    case "c":
                        // Do Something
                         multiview.ActiveViewIndex=2
                        break;
                    case "d":
                        // Do Something
                          multiview.ActiveViewIndex=3
                        break;
                    default:
                         multiview.ActiveViewIndex=4
                        break;
                }

这是一种简单的方法.

在这种情况下,例如路线“PersonalRoute”暴露模式个人/账户存款可以用于这个特殊情况,如果你需要重定向到一个特定的情况.现在的问题是,我不知道你的业务逻辑是什么我不知道你的dal配置,所以我无法让你找到一个确切的方法.

我不知道将在您的页面中执行或运行多少任务,因此我无法向您提供有关它的更多信息.

创建一条独特的路线不是一个好方法或想法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读