更新布局中的部分视图

Posted

技术标签:

【中文标题】更新布局中的部分视图【英文标题】:Update partial view in Layout 【发布时间】:2015-10-06 14:42:23 【问题描述】:

我正在使用 C# 开发 ASP.NET MVC 项目。 好的,所以我有一个布局视图,我将部分视图放在其中,其中仅包含一个显示通知消息的 div。

现在从某种角度来看,我有一个按钮,可以在 5 分钟内以异步方式生成报告。在生成报告时,我需要允许用户使用网站的其他区域。

我的操作方法,一旦成功生成报告,只返回一个字符串“Success”,o/w“Fail”。 我想要做的是将返回的字符串分配给布局页面上的部分视图的 div。因此,用户可以通过这种方式在网站内的任何位置看到通知。

我该怎么做?谢谢。

【问题讨论】:

【参考方案1】:

这里发生了许多不同的事情。首先,您希望服务器将用户更新为“成功”或“失败”状态。这需要 1) 使用 web 套接字在客户端和服务器之间创建持久连接,允许服务器与客户端对话,而无需客户端首先发送请求,或者 2) 长轮询,即客户端不断发送以定义的时间间隔请求以查看服务器是否有任何更新。

在 Web 套接字出现之前,长轮询(使用 AJAX)是实现此目的的唯一方法,Web 套接字相对较新,并未得到普遍支持。特别是,服务器端需要 IIS8+,而客户端则需要一个现代浏览器,除了 IE 9 及以下版本之外,它实际上是任何浏览器。如果您无法在 IIS8+ 上运行该站点,或者您需要支持旧版本的 IE,那么您将陷入长轮询。

但是,无论采用哪种方法,您都被束缚在一个页面上。如果用户离开,Web 套接字连接将关闭并且长轮询停止。如果用户仍在您的站点上,则下一页将需要重新建立所有这些功能以使其正常工作。这并不难——只是需要注意的事情。这只是意味着您需要在整个站点的页面加载时运行一些通用脚本。

现在就替换“部分视图”的内容而言。你不应该那样看。我鼓励您阅读我的帖子:There's no such thing as a "partial view" client-side,我将在其中详细介绍。 TL;DR 版本是客户端的所有这些更新都发生在客户端,此时,您所拥有的只是浏览器 DOM。没有“局部视图”的概念。如果要替换 DOM 的一部分,则必须选择它并对其进行操作。这一切都是用 javascript 完成的,一切都在你身上。没有简单的“替换此局部视图”按钮。

【讨论】:

以上是关于更新布局中的部分视图的主要内容,如果未能解决你的问题,请参考以下文章

Yii:如何在视图中定义部分布局?

将值从部分值传递到 mvc 中的布局视图

如何在没有代码的情况下隐藏 Android 布局 xml 中的部分可见视图?

从android中的派生类更新父类(包括导航视图)中声明的imageview

如何使用组合布局为不同部分设置不同的背景?

将任意数据从局部视图传递到布局视图