0

首先我不确定这是这个问题的正确标题,但希望我会做得更好,试图解释我需要完成的事情。加载和显示上下文特定的常见问题

介绍

我想要做的就是加载相对于我在网页的常见问题的信息。所以说,我在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并在其中显示它的innerHTML常见问题方框。

问题

所有上述所说的理论上应该工作。但我无法理解如何在我正在查看的“页面”与数据库中的PageFAQ条目之间进行映射。如你所知,ASP.NET MVC中没有真正的页面,只有路由。那么有什么方法可以使用路线数据来获取所需的PageFAQ?或者我应该使用查询字符串?或者还有更好的方法来完成这一切,最好是不首先使用魔术字符串的东西。

UPDATE:

难道是太多的开销加载PageFAQ及其所有ElementFAQ孩子将它们放到网页作为隐藏层?或者,当用户滚动元素时,通过AJAX加载它们会更好吗?

您的建议非常受欢迎。

回答

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); 
+0

这绝对有帮助。谢谢。所以我认为我的方法应该工作?我要在上面更新我的问题,所以请回复更新以及如果您不介意... – Kassem 2011-03-26 14:32:08

+0

@Kassem,是的,您的方法将工作。就您的更新而言,您必须对其进行测量。 AJAX选项的优点在于,只有在用户要求提供这些信息时才会懒惰地完成,而如果您永久加载常见问题解答,那么如果用户永远不会看到它,可能会有点浪费。 – 2011-03-26 14:32:53

+0

这应该在哪里?我的服务层是一个代码库,所以它不知道有关RouteData的任何信息。所以我认为这应该是在一个动作方法(比如在ApplicationController或类似的东西上),并且会被Ajax请求调用?或者,也许应该从视图中调用@ Html.Action()调用?还有其他建议吗? – Kassem 2011-03-26 16:19:56