MVC 3.分别加载菜单和内容

时间:2013-02-06 18:39:35

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

我有一个包含3个部分的应用程序:

  • 主菜单;
  • 上下文菜单 - 与主菜单中的所选项目相关;
  • 和Page body - 与上下文菜单中的选定项目相关;

“主菜单”和“上下文菜单”基于会员资格。我不希望每次加载页面时都加载它们,因为这会消耗资源数据库。所以,我使用ajax只加载主菜单一次,当选择一个项目时,我加载该项目的上下文菜单。

我的问题是:每个表单的帖子都会删除我的菜单。

问题:我是否必须使用ajax构建我的整个应用程序?我不想这样做,因为在表单中发布一个帖子然后用ajax将所有数据发送到控制器太简单了。

到目前为止,我有两个选择:

  1. 使用ajax加载我的菜单,使用IFRAME加载页面正文,因此帖子不会再次呈现我的菜单。
  2. 使用ajax执行所有操作;
  3. 是否可以使用ajax加载菜单并使用表单的帖子?

    对不起,如果我不够清楚。

2 个答案:

答案 0 :(得分:1)

给我一​​个暂停的句子是“我不想在每次加载页面时加载它们,因为这会消耗资源数据库。”

你看,我已经构建了很多应用程序,它们根据用户角色(你称之为成员资格)显示菜单和子菜单。从资源或数据库的角度来看,这从来就不是问题。

当您登录时,您可以访问一次所需的所有成员资格信息。在最简单的情况下,用户的身份将与他们拥有的角色一起存储在上下文中(HttpContext) .User),因此您根本不需要数据库查找来获取每个请求的此信息。请注意,在这种情况下,也不需要ajax。

如果由于某种原因您无法在上下文中存储您的会员信息,您仍然可以存储在会话中(如果在内存中)或加密的Cookie中。

现在,我明白了,我并不是你的情景的所有细节,而且可能在你的情景中你应该做的事情是有道理的,但我建议你再考虑一下,因为在正常情况下是什么你指出是一个问题(数据库资源)应该不是一个问题。

最重要的是:如果您更改了应用程序,它会在用户登录时存储会员信息,那么您就不会遇到问题。

答案 1 :(得分:0)

您不必使用Ajax构建所有应用程序。但在这种情况下,Ajax可能是最好的前进方式。

以下是我的建议

  1. 在dev
  2. 中创建数据条目
  3. 让每个输入控制器都标有一个类(比如'dataEntry')
  4. 创建一个javascript函数来迭代开发并构建一个包含类dataEntry的所有元素的列表
  5. 使用列表构建json对象。使用每个元素的名称作为属性名称,使用值作为属性值
  6. 使用jquery ajax将此发布到控制器操作
  7. [可选]您可以使用.done和.fail方法对呼叫成功或失败采取措施
  8. 我知道这可能看起来很吓人,但如果您有许多数据输入表单,则可以重复使用此代码。