【问题标题】:Loading & Displaying Context Specific FAQ加载和显示特定于上下文的常见问题解答
【发布时间】:2011-03-26 14:15:48
【问题描述】:

首先,我不确定这是这个问题的正确标题,但希望我能做得更好,试图解释我需要完成的工作。

简介

我想要做的是加载与我所在页面相关的常见问题解答信息。假设我在 www.domain.com/items/index 页面上,我想加载描述在此页面上可以完成的操作以及可用选项的常见问题解答信息......等等。然后,用户翻滚一个搜索栏,我想(在页面的一侧)显示一个简短的文本,描述搜索框及其工作原理(比如告诉他们您可以通过关键字或特定项目或...等进行搜索)。其余页面和这些页面上的内容也是如此。

头脑风暴

好吧,到目前为止我的想法是什么,但我不确定(因此这就是我发布问题的原因)如下:

  1. 在数据库中,创建两个表:PageFAQ 和 ElementFAQ,其中 ElementFAQ 是 PageFAQ 的子表。我之所以想到这一点,是因为我会将 PageFAQ 和所有 ElementFAQ 一起加载,然后将它们转储到页面中并隐藏它们。
  2. 此时,我只会显示 PageFAQ 的摘要文本,它会告诉用户更多关于页面和一些可用选项的信息。
  3. 现在,为了加载正确的 ElementFAQ,应在服务器端和客户端采取一些步骤:
    • 确保数据库中 ElementFAQ 的 ID/名称与之前转储到页面中的隐藏 div 匹配(当加载与页面相关的 PageFAQ 时)
    • 当用户滚动一个元素(比如搜索栏)时,我会使用 jQuery 搜索一个 id 为 faq_searchBar 的 div,并在 FAQ 侧框中显示其 innerHTML。

问题

上面提到的所有东西理论上都应该有效。但是我不知道如何在我当前正在查看的“页面”和数据库中的 PageFAQ 条目之间进行映射。如您所知,ASP.NET MVC 中没有真正的页面,只有路由。那么有什么方法可以使用路由数据来获取所需的 PageFAQ 吗?或者我应该使用查询字符串?或者有没有更好的方法一起做这一切,最好是首先不使用魔术字符串的方法。

更新:

加载 PageFAQ 及其所有 ElementFAQ 子项并将它们作为隐藏的 div 转储到页面中会不会有太多开销?或者当用户滚动元素时通过 AJAX 加载它们会更好吗?

欢迎您提出建议。

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 asp.net-ajax asp.net-mvc-routing


    【解决方案1】:

    我正在查看的“页面”

    string currentAction = RouteData.GetRequiredString("action");
    string currentController = RouteData.GetRequiredString("controller");
    string id = CalculateId(currentAction, currentController);
    PageFAQ pageFAQ = Repository.GetFAQ(id);
    ...
    

    CalculateId 可以简单地将当前控制器和操作关联到数据库中的相应 id 或直接将这些列添加到数据库中然后查询:

    string currentAction = RouteData.GetRequiredString("action");
    string currentController = RouteData.GetRequiredString("controller");
    PageFAQ pageFAQ = Repository.GetFAQ(currentAction, currentController);
    

    【讨论】:

    • 这绝对有帮助。谢谢你。所以我认为我的方法应该有效?我将在上面更新我的问题,所以如果您不介意,也请回复更新...
    • @Kassem,是的,你的方法会奏效。就您的更新而言,您将不得不对其进行测量。 AJAX 选项的优点是只有当用户要求提供此信息时才会延迟执行,而如果您总是加载常见问题解答,如果用户从未看到它可能会有点浪费。
    • 顺便说一句,这应该在哪里?我的服务层是一个代码库,所以它并不真正了解 RouteData。所以我假设这应该在一个动作方法中(比如在 ApplicationController 或类似的东西上)并且会被 Ajax 请求调用?或者也许应该通过视图中的@Html.Action() 调用来调用它?还有其他建议吗?
    猜你喜欢
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    相关资源
    最近更新 更多