4

我想用 ASP.NET MVC 组合一个论坛/留言板。在这些类型的论坛上很常见的是分层板类别,例如:

-综合讨论
-技术支持--
网站技术支持--产品
技术支持
--产品A技术支持
--产品B技术支持

然后在每个类别下方是主题,并且消息属于这些主题。我主要关心的是 1.) 在给定 URL 的情况下到达正确的位置,2.) 在我的 URL 中不包括大量不必要的信息,以及 3.) 能够从代码重新创建 URL。

我希望一个 URL 是这样的:

mysite.com/Forum/ - 论坛索引
mysite.com/Forum/General-Discussion/ - “一般讨论”的板索引
mysite.com/Forum/Technical-Support/Product/Product-A/ - “产品 A 技术支持”的板索引
mysite.com/Forum/Technical-Support/Website/Topic1004/ - “网站技术支持”板中 ID 为 1004 的主题的主题索引
mysite.com/Forum/Technical-Support/Website/Topic1004/3 - ID 为 1004 的主题的第 3 页

现在,我已经排除了动作名称,因为它们可以根据我所在的位置推断出来。我的数据库中的每个 Board 实体都有一个“UrlPart”列,该列已编入索引,因此我希望能够对该表进行相对快速的查询,以确定我在哪里。

问题是:为了找出正确的位置,我应该使用自定义路由处理程序、自定义路由绑定器,还是应该创建模糊的路由规则?

这个建议看起来很不错,但看起来也有很多工作却没有什么好处: ASP.NET MVC custom routing for search

这似乎表明创建模型绑定会更容易: MVC Dynamic Routes

为了实现#3,我将不得不创建自己的自定义 URL 生成逻辑,对吗?

4

2 回答 2

5

如果您需要深度和/或不一致的 URL,我建议您使用基于属性的路由,例如此处讨论的解决方案。

我更喜欢基于属性的方法,而不是把每条路由都放在 Application_Start 中,因为你有更好的参考局部性,这意味着路由规范和处理它的控制器是靠得很近的。

使用我实现的 UrlRoute 框架(在codeplex上可用),您的控制器操作将如何查找您的示例:

[UrlRoute(Path = "Forum")]
public ActionResult Index()
{
    ...
}

[UrlRoute(Path = "Forum/General-Discussion")]
public ActionResult GeneralDiscussion()
{
    ...
}

[UrlRoute(Path = "Forum/Technical-Support/Product/{productId}")]
public ActionResult ProductDetails(string productId)
{
    ...
}

[UrlRoute(Path = "Forum/Technical-Support/Website/{topicId}/{pageNum}")]
[UrlRouteParameterDefault(Name = "pageNum", Value = "1")]
public ActionResult SupportTopic(string topicId, int pageNum)
{
    ...
}

使用这种方法,您可以使用相同的帮助程序(Url.Route*、Url.Action*)生成出站 URL,如果您使用默认路由处理程序手动添加路由,则无需额外工作。

于 2009-06-20T00:00:30.713 回答
1

您可以让它们全部转到一个控制器操作,该操作通过手动拆分其余 url 并调用 BLL 上的方法来为您处理路由处理,然后将任务委托给其他方法,最终根据您的返回 View()需要。

于 2009-06-20T01:05:35.433 回答