asp.net web 表单中的 ASP.Net 路由

2024-04-07

我正在为我的网站使用 ASP.Net Web 表单路由,但我想让它更具结构性并使用适当的结构隐藏所有查询字符串 ID,例如Language/Category/PageName-Title例子:www.abc.com/en/sports/cricket-world-cup

但凭借我当前的路由技术,我能够使其工作

www.abc.com/en/1/13/cricket-world-cup

domain/english-folder/language-id/page-id/page-title

我怎样才能使它更加结构化`www.abc.com/en/sports/cricket-world-cup

由于我的查询字符串很少,所以我这样设计

    //For Page.aspx
    routes.MapPageRoute("Page_Route", "en/page/{LID}/{PID}/{PageName}", "~/en/Page.aspx", false,
                new RouteValueDictionary {
                    { "LID", "0"},
                    { "PID", "0" },
                    { "PageName", "Page-not-found" }},
                new RouteValueDictionary {   
                    { "LID", "[0-9]{1,8}" },
                    { "PID", "[0-9]{1,8}" },
                });

上述路由的结果让我得到像这样的友好 URL
www.abc.com/en/1/13/cricket-world-cup

但我想进一步构造 URL,就像示例中的 URL 一样。

www.abc.com/en/sports/cricket-world-cup

示例:我发现这个网址更加结构/http://www.thenational.ae/news/world/europe/turkey-providing-jobs-a-future-for-more-greeks

我怎样才能实现相同的结构他们通过querystrings作为隐藏字段。请建议此类网址的最佳方法。

另一个例子是http://mashreqbank.com/uae/en/corporate/lending/trade-finance.aspx http://mashreqbank.com/uae/en/corporate/lending/trade-finance.aspx

他们正在使用 asp.net,但我不确定它是 ASP.Net MVC 还是 ASP.Net Webform。

我已经在这种路由上苦苦挣扎了很长时间,甚至我找不到一个可以考虑多个查询字符串的完整示例,因为大多数示例都基于一个查询字符串。

编码专家提供的任何示例帮助将不胜感激。

UPDATE:让我们考虑一下这个表,我用它来存储页面名称、标题、处理程序、语言区域等。这只是一个演示表,与我所引用的示例结构化 URL 的实际网站不同。我什至不确定他们是否使用 URL 路由进行操作,或者这些是实际的物理文件夹和文件,例如旧式网站,您可以在其中创建实际文件夹并将文件放入其中等。

Page_ID     Page_Name               Page_Title              Page_Handler        Parent_Page_ID  Language_ID     Region_ID
1           Home                    Home                    index.aspx              0               1               uae
2           Personal                Personal                index.aspx              0               1               uae
3           Accounts & Deposits     Accounts & Deposits     index.aspx              2               1               uae
4           Current Account         Current Account         current-account.aspx    3               1               uae
5           Current Gold Accounts   gold Account            gold-account.aspx       3               1               uae
6           Easy Saver              Easy Saver Account      saver-account.aspx      3               1               uae
7           Fixed Deposits          Fixed Account           fixed-account.aspx      3               1               uae
8           Loans                   Loans                   index.aspx              2               1               uae
9           Personal Loans          Personal Loans          index.aspx              8               1               uae
10          car Loans               car Loans               car-loan.aspx           8               1               uae

上述结构的网站示例http://mashreqbank.com/ http://mashreqbank.com/

如果页面设计相同,我们可以使用通用页面处理程序,这就是我假设的让我们说page.aspx,

请感觉对结构和数据进行更改以达到预期的结果。


你可以简单地拥有类似的东西:

routes.MapPageRoute(
    "article-route",
    "en/{category}/{pageName}",
    "~/en/page.aspx");

然后继续en/page.aspx您可以访问类别和页面名称,假设您有一个查询来根据这两个变量查找正确的文章:

string category = Page.RouteData.Values["category"] as string;
string pageName = Page.RouteData.Values["pageName"] as string;

不过,如果您不能简单地通过以下方式识别页面category and pageName(根据您更新的问题这似乎是正确的),您可能需要id在路线中。在这种情况下,您可以忽略category and pageName路由值,因为它们仅用于美观的 URL。我们唯一关心的参数是id因为这就是你识别一篇文章的方式。例如,以下是各种路线的三个示例

routes.MapPageRoute(
    "uae-route",
    "uae/en/{category}/{id}/{pageName}",
    "~/en/index.aspx");

routes.MapPageRoute(
    "gbr-route",
    "gbr/en/{category}/{id}/{pageName}",
    "~/en/index.aspx");

routes.MapPageRoute(
    "account-route",
    "en/{id}/{pageName}",
    "~/en/current-account.aspx");

//then on en/index.aspx and current-account.aspx
int pageId= 0;
if (Int32.TryParse(Page.RouteData.Values["id"] as string, out pageId)) {
    // get the page details (including parent page id and language id if needed)
    // where Page_ID=pageId. 
}

不过,从声音来看,您想要执行上面的第一个示例,这意味着您需要一种简单地提取文章的方法category and pageName并且不是任何类型的id.

UPDATE:您不需要为每条路径创建一条路由......这就是路由的全部意义。如果您有多个处理程序,那么您至少需要每个处理程序的路径(.aspx page).

这是最简单的使用id在 URL 中,因为根据您的数据结构,这是识别您要拉取的页面的唯一方法。因此,让我们使用您的示例,使用这些路线:

www.abc.com/en/personal

www.abc.com/en/personal/acounts-deposits/

www.abc.com/en/personal/acounts-deposits/current-account

www.abc.com/en/personal/acounts-deposits/current-gold-account

www.abc.com/en/personal/acounts-deposits/easy-saver

你有一条路线:

routes.MapPageRoute(
    "personal_route",
    "en/personal/{category}/{pageName}",
    "~/personal.aspx",
    false,
    new RouteValueDictionary { { "category", string.Empty }, {"pageName", string.Empty}}); //allow for no values

And the personal.aspx有以下代码:

protected void Page_Load(object sender, EventArgs e)
{
    string category = Page.RouteData.Values["category"] as string;
    string pageName = Page.RouteData.Values["pageName"] as string;
    if (String.IsNullOrEmpty(category)) {
        //no category... must be the /personal route. handle that    
    }
    else if (String.IsNullOrEmpty(pageName))  {
        //no page name, just load the category page content
        //Psuedo query against your non-existant data schema
        //SELECT * FROM SiteContent WHERE Page_Handler='Personal' AND Page_Category=category && Page_URL=""
    }
    else {
        //SELECT * FROM SiteContent WHERE Page_Handler='Personal' AND Page_Category=category && Page_URL=pageName
    }
}

正如您所看到的,您的问题是您无法识别没有 ID 的页面。您需要将表中的所有这些 ID 替换为唯一的 URL。这是可行的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

asp.net web 表单中的 ASP.Net 路由 的相关文章

随机推荐

  • 有没有办法*防止* ReSharper 并行运行程序集的单元测试?

    我在单元测试设置中看到一个选项 并行运行最多 1 2 个程序集 但将其设置为 1 似乎仍然并行执行单个程序集的测试 有没有办法完全禁用并行执行 这是 ReSharper 6 1 您可以尝试在此处查看堆栈溢出答案如何串行运行 NUnit 测试
  • 如何编写一个以可变参数函数作为参数的 Haskell 函数

    我正在尝试创建一个函数 该函数获取可变参数函数一个论点 i e func a gt gt a gt a 我怎样才能做到这一点 我读过关于多变量函数 https stackoverflow com questions 3467279 how
  • 使用 NLTK python 对使用示例数据或 Web 服务的句子进行情感分析?

    我正在着手一个用于情感分析的 NLP 项目 我已经成功安装了Python的NLTK 看起来是一个很棒的软件 但是 我无法理解如何使用它来完成我的任务 这是我的任务 我从一长条数据开始 假设来自他们的网络服务的数百条关于英国大选主题的推文 我
  • 当鼠标悬停在其中一个链接上时,CSS 会更改两个链接

    我有以下 html div div class section ul li class home li a href home class goto home Home a li li class about li a href about
  • 方法 Illuminate\Auth\RequestGuard::attempt 不存在

    我对 laravel 和 lumen 都是新手 我正在lumen 5 6中使用oauth2 0创建登录api 我已经安装了护照并生成了令牌 下面是我的登录控制器功能 它工作正常 它返回令牌 namespace App Http Contro
  • 如何在Android Studio中导入libstreaming?

    我是一名使用 Eclipse IDE 的老开发人员 现在我切换到 Android Studio 我想使用下面的教程 直播库 http www androidhive info 2014 06 android streaming live c
  • 如何只打开一个 fancybox 窗口(而不是 onclick)

    我正在触发 fancybox 打开onclick像这样 telefonosOtrosPaises fancybox type iframe href http es solmelia com nMenus jsp telefonosOtro
  • 使用 rust-cpython 从 Rust 并行运行 Python 代码

    我正在尝试使用 Rust 加速数据管道 该管道包含一些我不想修改的 Python 代码 因此我尝试使用 Rust 按原样运行它们rust cpython https docs rs cpython 0 4 1 cpython 和多线程 然而
  • 在 MVC5 中运行更新数据库时出错

    我有一个 MVC 5 应用程序 它的 MySQL 数据库托管在 Azure 中 它运行得很好 但是今天当我尝试输入 Update Database 并运行它时 我收到以下错误消息 System Runtime Serialization S
  • 如何在 Fossil 中闭合叶子

    The Fossil SCM 中的分支文档 http www fossil scm org index html doc tip www branching wiki表示如果叶子具有闭合标签 则该叶子被视为闭合 然而 当我进入 gt fos
  • 通过 jQuery Ajax 传递 PHP 数组

    我有一个 php 数组 toField explode ids Which looks something like 24 25 26 29 我想通过 jQuery AJAX 传递这个数组 如下所示
  • 将外语从csv文件导入到Stata

    我正在使用Stata 12 我遇到了以下问题 我正在使用以下命令将一堆 csv 文件导入到 Statainsheet命令 数据集可能包括俄语 克罗地亚语 土耳其语等 我认为它们是用 UTF 8 编码的 在 csv 文件中 它们是正确的 我把
  • ProGuard 混淆、java、Google Gson 和通用集合 - 如何保留成员?

    我有一堂这样的课 public class MyClass private Queue
  • 如何使用 KIF 框架模拟位置服务

    我使用KIF框架 http github com kif framework KIF http github com kif framework KIF 用于 UI 测试 我需要模拟位置服务 问题是位置服务在 KIF 方法 beforeAl
  • 选项卡面板中的 Vbox 布局问题

    我有一个问题vbox布局所以我创建了一个简单的例子 这说明了问题 这让我vbox布局到fit屏幕的高度 On the hbox屏幕上 视图看起来符合预期 然而 当我简单地改变hbox to vbox所有文本都覆盖在左上角 所有代码都在下面给
  • 如何在 Windows 脚本宿主中使用 jQuery?

    我正在编写一些需要解析大量包含 HTML 片段的文件的代码 看起来 jQuery 对此非常有用 但是当我尝试将 jQuery 加载到 WScript 或 CScript 之类的内容中时 由于 jQuery 对窗口对象的许多引用 它会抛出错误
  • 访问 Node JS Lambda 中的 AWS SSM 参数

    我能够在 NodeJS 中本地从 AWS SSM 参数存储中检索数据 但当我将代码移至 Lambda 时却无法检索数据 我搜索过 但没有找到很多使用 NodeJS 设置 Lambda 且不使用 无服务器 框架的示例 我知道我错过了一些简单的
  • Polymer + Dart2js 不工作

    当我使用 Polymer 库创建新应用程序时 它会生成一个示例项目 该项目在 Dartium 中运行得很好 但是当我编译它时 使用pub build 它不再起作用了 我收到两个 404 错误和一个未捕获的类型错误 这是我在 Chrome 中
  • 使用 JNI 链接静态库

    Java 8 之前的 Java 版本要求本机代码位于共享库中 但我读到 在 Java 8 中可以将静态链接库与 JNI 一起使用 我搜索过示例但找不到任何示例 如何将 JNI 库静态链接到我的 java 应用程序中 Java SE 8规范已
  • asp.net web 表单中的 ASP.Net 路由

    我正在为我的网站使用 ASP Net Web 表单路由 但我想让它更具结构性并使用适当的结构隐藏所有查询字符串 ID 例如Language Category PageName Title例子 www abc com en sports cr