【问题标题】:Should a Menu load a Views or a Partial Views in MVC 5?菜单应该在 MVC 5 中加载视图还是部分视图?
【发布时间】:2015-04-05 10:17:03
【问题描述】:

为简单起见,想象一个网站的菜单左侧有三个按钮,右侧有一个内容区域。按钮将内容加载到内容区域。

当一个按钮被点击时,我想要:

1) 相应更改的 URL。这意味着如果按钮是“Foo”、“Bar”和“Baz”。当点击第三个按钮时,我希望 URL 类似于“http://localhost/mySite/Baz/ShowBazs”。

2) 按钮应使用 CSS 类突出显示。 (在发出 AJAX 请求之前使用一点 jquery)

3) (仅?)应该加载内容区域


加载视图

  1. 好的
  2. 不好。菜单重新加载到从头开始
  3. 半正常。 菜单重新加载到从头开始。内容区域可以很好地加载到@RenderBody()

加载局部视图

1) 不好。 URL 没有任何反应

2) 好的。菜单未重新加载

3) 好的。仅加载内容区域。


我知道设计所有网站没有单一的答案。只是觉得我在这里错过了一些好东西。

您认为最好的解决方案是什么?为什么?

目前我只在内容区域中使用部分视图。菜单很好,内容只被加载并且真的很好。但是 URL 保持不变,根本不使用 Views 感觉不对。

我最好的想法是重写网站以使用视图,然后让视图负责设置突出显示的按钮。

【问题讨论】:

  • 所以您基本上已经有了一个单页应用程序?你是在使用 Knockout 或 Angular 之类的框架,还是只使用纯 JS?我认为您仍然应该使用部分视图,如果有任何东西可以分解和分离您网站的组件,否则您最终会得到大量视图。
  • 我从一个 MVC 项目开始,而不是 SPA。我没有使用 Knockout 或 Angular。纯粹是 MVC 5、Javascript、jQuery、Razor、.cshtml.. 我一直在考虑可以重用局部视图的地方。就像在内容区域的某个地方一样。不适用于孔内容区域。感觉不对。
  • 虽然它们的主要优势是可重用性(类似于 Web 表单用户控件),但它们还可以帮助分解更大的视图。
  • 杰普。但我没有一个更大的视图开始。我只有一个大的局部视图开始。这似乎是错误的。
  • 如果您通过 jQuery 从服务器返回它们,那是正确的。如果您担心部分视图太大,请考虑将它们拆分为单独的部分视图。

标签: ajax asp.net-mvc asp.net-mvc-4 asp.net-mvc-5 unobtrusive-javascript


【解决方案1】:

实现所有设计要求的唯一可能方法是通过History API in HTML 5(换句话说,it will only work in modern browsers:IE 10+ 以及人类已知的几乎所有其他浏览器)。有一个支持 IE 9 及以下版本的 polyfill:History.js。但是,它在这些浏览器中使用 URL 片段 (#foo),因此 URL 结构不会完全相同相同。无论如何,这是一个很好的脚本,因为 History API 在支持它的浏览器中的实现方式有些不同,而 polyfill 有助于保持一切都在同一基础上。

【讨论】:

    猜你喜欢
    • 2012-04-05
    • 2020-12-03
    • 2011-06-03
    • 2012-12-29
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 2011-03-31
    相关资源
    最近更新 更多