【问题标题】:ASP.NET MVC embed viewsASP.NET MVC 嵌入视图
【发布时间】:2013-06-28 19:11:45
【问题描述】:

我是 ASP.NET 和 MVC 的新手(虽然不是编程)。观看视频并加快速度。我主要来自桌面世界,所以我不是回帖的忠实粉丝。我自然而然地倾向于 ajax。

在 MVC 中,我们的控制器似乎通常会回发到视图(html 页面)。 我的问题是,我们可以将视图嵌入到 1 个主视图中吗? 这个想法是每个请求都将是对控制器的 ajax 调用,它会确定它需要作为要嵌入的 html 内容返回的视图进入现有页面。由于我们可以通过 javascript 对返回的视图执行所有很酷的视觉客户端技巧,从而导致没有回发和更流畅的用户体验。想想变形、褪色、滑动等。

作为用户,我希望点击一个链接,让页面淡出,然后淡入整个新页面。

我可能是在展示我对这个领域的新手的无知,但这似乎很有可能。

【问题讨论】:

  • 查看单页应用程序 ASP.NET SPA。或者通常 w 会使用 ajax 来避免完整的回发。
  • 感谢您的指导。我之前听人说过,当从 ajax 调用返回要呈现的 HTML 时,问题很常见。也许 SPA 可以解决这些问题。
  • 嗯,SPA 正是你所描述的我的想法。
  • 我会说 SPA 对于内容繁重的网站(与 Web 应用程序相反)通常不是一个好主意,因为除非您处理历史状态,否则要优雅地降级,并正确返回“内部内容”以响应您将遇到问题的无状态 GET 请求。小心点。不要忘记优雅地处理 Ajax 请求失败的情况(确实如此)。

标签: asp.net-mvc


【解决方案1】:

首先,MVC 中没有 Postback 的概念。这是将数据传递到服务器的 Web 窗体策略。控制器不执行任何回发查看。您必须了解的是,控制器负责,比如说,准备信息。此信息被传递给视图,以视图认为合适的方式呈现。控制器返回一个结果并说明应该使用哪个视图来满足用户的请求。

用户可以使用视图中的表单将来自客户端的数据提交到某些控制器中的操作。控制器接收信息,以特定方式对其进行处理并对其进行处理,例如将其存储在某个数据源中。这不是 Web 表单中的回发概念。

您在问题中描述的是 SPA 应用程序的工作方式,但您必须了解,即使在 SPA 应用程序中,视图也不总是预加载的。如果您有一个大型应用程序,尤其如此。

通过 Ajax 下载视图(实际上是部分视图)是完全正常的,因此您不应该不惜一切代价避免这种情况。稍后当您通过 Ajax 获取视图时,您可以应用 jQuery 过滤器和特殊效果。

更新:控制器返回操作结果。正如你猜到的那样,这些结果的基类是ActionResult。许多其他类继承自这个类。例如,ViewResult 是最常用的,也是此答案的主题。您还拥有用于返回文件的 FileResult,用于执行重定向的 RedirectToRouteResult,等等。这些都是行动的结果。在 MVC 中返回一个视图意味着:“为了向用户显示此数据,请使用此视图或部分视图。”

当您请求(发出 HTTP GET 方法)时,控制器会返回一个视图给您,而当您发布数据(发出 HTTP POST 方法)时,控制器会做一些事情并执行重定向,之后它通常会返回一个视图,或者返回文件等。 MVC 中的 Postback 本质上是不存在的。例如,在 Web 窗体中,如果您单击按钮或更改将 AutoPostBack 设置为 true 的下拉框中的值,则会启动回发并将 ViewState 发送到服务器。 MVC 没有那种机制来触发回发。您可以提交表单或使用 Ajax 执行 GET 请求以检索信息或 POST 以将数据作为 JSON 提交回服务器。

因此,当您请求查看该页面时,它不是回发。当您将表单数据发布到服务器时,它不是回发,它正在提交数据,并且与 Web 表单回发不同。

希望现在对你有所帮助。

【讨论】:

  • 如果我错了,请纠正我,但通常控制器的最终结果是显示一个视图,显示一个视图的行为会向浏览器发送一个新页面,这基本上是一个回发,即浏览器对页面的可见加载。我想这就是我想说/避免的。
  • 请在答案中查看我的更新。希望我能帮助你更好地理解 MVC。
  • 我知道我不应该这样做,但谢谢你 @HuseinRoncevic 的回答。这是迄今为止我读到的关于 MVC 工作原理的最佳解释!
猜你喜欢
  • 1970-01-01
  • 2018-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多