【问题标题】:Trouble in Url Routing in ASP.NET MVCASP.NET MVC 中的 URL 路由问题
【发布时间】:2014-04-03 11:36:48
【问题描述】:

我正在尝试构建一个 CMS,我只需要网站前端的两个视图,它应该是这样的

//localhost/  => Should be Index / Home Page

//localhost/any-main-page1
//localhost/any-main-page2
.
.
//localhost/any-main-pageN


//localhost/any-main-page1?{any-length-query-string}

//localhost/any-main-page1/any-sub-page1

//localhost/any-main-page1/any-sub-pag1e?{any-length-query-string}

主页面子页面子子页面

没有限制

要求任何子页面可以是任意数量的子子页面,最少3级,最多可以是任何东西。

我试过path.js,它会在地址栏中显示#,这不是纯粹的SEO友好:(

我尝试使用 "SlugRouteHandler()",但它不能在所有情况下都解决。

我确实需要从数据库加载 URL,因为管理员将创建所有主页面和子页面

数据库:

菜单表

seourl 是列名,数据是: 家,关于我们,服务。服务/网络、服务/营销等,等等,

【问题讨论】:

  • 有没有办法解决这个路由问题?
  • 什么是“主页面和子页面或子子页面没有限制”是什么意思?这是否意味着页面本身的名称是无限的?或者您可以在 URL 中包含无限段?
  • 没错!你是对的
  • 我不确定 MVC 路由,但这似乎在 IIS Url Rewrite (iis.net/downloads/microsoft/url-rewrite) 中非常简单。也许研究他们的做法可以帮助你。

标签: jquery asp.net asp.net-mvc


【解决方案1】:

这不仅仅是您手头的“路由问题”。您需要一个跨越所有三层的解决方案:

  • 路由和名称解析
  • 唯一命名和 slugifying 名称
  • 将其存储在数据库中

每个部分实际上都是独立的部分,但只有解决这三个部分中的每一个才能解决您的问题。

这是一个非常广泛的问题;为了进一步帮助您,我们需要:

  • 表结构或类结构以及从数据库中提取的示例对象的样子
  • 名称的限制——每个“主页”名称是否保证唯一?是否保证给定主页的每个子页面都是唯一的?是否保证给定子页面的每个子页面都是唯一的?你明白了。

如果您的问题特别是仅在路由中,这里有一个可以处理它的路由,以及一个可以处理该路由的控制器:

routes.MapRoute("Page Resolution",
    "{mainPage}/{subPage}/{subSubPage}",
    new {controller = "PageController", action = "Page" }
);

routes.MapRoute("Page Resolution",
    "{mainPage}/{subPage}",
    new {controller = "PageController", action = "Page" }
);

routes.MapRoute("Page Resolution",
    "{mainpage}",
    new {controller = "PageController", action = "Page" }
);

控制器

public ActionResult Page(string mainPage, string subPage, string subSubPage) 
{
    var pageRepository = new PageRepository(); //simplified. Don't do this in actual code
    var page = pageRepository.GetPage(mainPage, subPage, subSubPage);
    var pageViewModel = new PageViewModel(page);
    return View(pageViewModel); 
}

存储库中的代码可以处理重载以查找没有子页面或子子页面的页面。

上面的代码被简化了,因为您还没有向我们展示任何可以帮助我指定的代码。在这种情况下,我选择让存储库层处理如果其中任何一个值为String.Empty 会发生什么;而且由于我不知道你的数据检索机制是什么,所以我不能更进一步(SQLDataClient、LinqToSql、Entity Framework、NHibernate 等)。

我还假设美化和修饰 URL 是根据有关该主题的其他 Stack Overflow 问题之一完成的。

作为一般解决方案,这里有三个 Stack Overflow 问题可以解决您实际遇到的不同问题:

【讨论】:

  • 是的,乔治!在我的数据库中都是唯一的
  • @SaheelAhmed 你应该用我在我的解决方案中提出的问题更新你的问题,以及你希望我们解决这个问题的哪一部分;就目前而言,我可以写一本关于你需要做什么的书。我们需要查看您的代码,以便缩小问题范围。你的存储有问题吗?你的检索有问题吗?您的 URL 解析有问题吗?如果只是在最后一部分(路由),那么我们需要查看从数据库中检索到的一些对象,其中包含 URL 段以及它们的外观和具体区别。
  • routes.MapRoute( name: "CmsRoute", url: "{*permalink}", defaults: new { controller = "Page", action = "Index" } ); @George,这能解决我的问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-03
  • 2011-11-11
  • 1970-01-01
  • 2013-11-13
相关资源
最近更新 更多