Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 装货及;显示特定于上下文的常见问题_Asp.net Mvc_Asp.net Mvc 3_Asp.net Ajax_Asp.net Mvc Routing - Fatal编程技术网

Asp.net mvc 装货及;显示特定于上下文的常见问题

Asp.net mvc 装货及;显示特定于上下文的常见问题,asp.net-mvc,asp.net-mvc-3,asp.net-ajax,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc 3,Asp.net Ajax,Asp.net Mvc Routing,首先,我不确定这是否是这个问题的正确标题,但希望我能更好地解释我需要完成什么 导言 我想做的是加载与我所在页面相关的FAQ信息。假设我在www.domain.com/items/index页面上,我想加载FAQ信息,这些信息描述了可以在此页面上执行的操作以及可用的选项。。。然后,用户翻过搜索栏,我想(在页面的一侧)显示一个简短的文本,描述搜索框及其工作方式(比如告诉他们可以通过关键字或特定项目进行搜索等等)。其余的页面和这些页面上的内容都是这样 头脑风暴 好的,到目前为止,我的想法是,我不确定(

首先,我不确定这是否是这个问题的正确标题,但希望我能更好地解释我需要完成什么

导言

我想做的是加载与我所在页面相关的FAQ信息。假设我在www.domain.com/items/index页面上,我想加载FAQ信息,这些信息描述了可以在此页面上执行的操作以及可用的选项。。。然后,用户翻过搜索栏,我想(在页面的一侧)显示一个简短的文本,描述搜索框及其工作方式(比如告诉他们可以通过关键字或特定项目进行搜索等等)。其余的页面和这些页面上的内容都是这样

头脑风暴

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

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

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

    更新:

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

    欢迎你的建议

    我当前正在查看的“页面”

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

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

    那肯定很有帮助。非常感谢。所以我认为我的方法应该有效?我将更新我上面的问题,所以如果你不介意的话,也请回复更新…@Kassem,是的,你的方法会奏效。就您的更新而言,您必须对其进行测量。AJAX选项的优点是,只有当用户要求提供这些信息时,它才会延迟完成,而如果您总是加载FAQ,如果用户从未看到它,则可能会有点浪费。顺便问一下,这应该在哪里?我的服务层是一个代码库,所以它对RouteData一无所知。所以我假设它应该在一个动作方法中(比如在ApplicationController或类似的东西上),并且会被Ajax请求调用?或者它应该由视图中的@Html.Action()调用来调用?还有其他建议吗?
    string currentAction = RouteData.GetRequiredString("action");
    string currentController = RouteData.GetRequiredString("controller");
    PageFAQ pageFAQ = Repository.GetFAQ(currentAction, currentController);