问题标签 [viewstate]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
791 浏览

c# - ASP.NET 2.0:如何在不创建历史记录点的情况下让页面记住视图状态?

我有一个页面,上面有几个字段和一个运行时生成的图像。此页面的内容位于 UpdatePanel 中。有一个按钮可以将用户带到第二个页面,该页面有一个在单击时调用 javascript:history.go(-1) 的按钮。

问题是,第一页做了一个完整的请求,而不是回发,或者只是使用它在离开它之前所处的状态。也就是说,这些字段都被重置为其默认值,从而使用户感到困惑。无论导航如何,我都希望保留他们的价值观。我不想为每个字段更改创建一个新的历史状态。

有任何想法吗?

0 投票
3 回答
33832 浏览

asp.net - WebResource.axd 上的“填充无效且无法删除”异常

我有一个在我们本地环境中运行良好的 ASP.NET 2.0 应用程序。当发布到测试服务器时,我们在服务器上遇到间歇性错误。

这是最常见的:

填充无效且无法移除。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.Security.Cryptography.CryptographicException: 填充无效且无法删除。

源错误:

在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。

堆栈跟踪:

[CryptographicException:填充无效且无法删除。]
System.Security.Cryptography.RijndaelManagedTransform.DecryptData(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount, Byte[]& outputBuffer, Int32 outputOffset, PaddingMode paddingMode, Boolean fLast) +1545747
System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount) +257
System.Security.Cryptography.CryptoStream.FlushFinalBlock() +30 System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(Boolean fEncrypt, Byte [] buf, Byte[] 修饰符, Int32 开始, Int32 长度, Boolean useValidationSymAlgo) +164
System.Web.UI.Page.DecryptString(String s) +83
System.Web.Handlers.AssemblyResourceLoader.System.Web.IHttpHandler.ProcessRequest(HttpContext context) +148
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +358 System.Web.HttpApplication.ExecuteStep(IExecutionStep 步骤, Boolean & completedSynchronously) +64

这发生在对特定 WebResource.axd 请求的请求上。

我们看到的另一个错误是:

视图状态 MAC 验证失败。如果此应用程序由 Web Farm 或集群托管,请确保配置指定相同的 validationKey 和验证算法。AutoGenerate 不能在集群中使用。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.Web.HttpException:视图状态 MAC 验证失败。如果此应用程序由 Web Farm 或集群托管,请确保配置指定相同的 validationKey 和验证算法。AutoGenerate 不能在集群中使用。

发布表单时偶尔会发生此错误。

现在,在您介入并告诉我此错误的明显(通常)答案之前,请考虑一下:

  • 应用程序部署到 IIS6 上的 Windows Server 2003
  • 它不在网络场上。这里只使用了一个网络服务器。
  • 应用程序池标识是一个自定义服务帐户,我确实aspnet_regiss -ga <username>在服务器上运行。没有效果。
0 投票
2 回答
465 浏览

visual-studio-2008 - ViewState、FormView 和控件

您如何(在 Visual Studio 中)比较 formview 中不同模板中的控件,以便跟踪 ViewState 错误?

0 投票
2 回答
471 浏览

.net - .net 应用程序中的奇怪错误。- RijndaelManaged

在最近的负载测试中,我遇到了一些奇怪的“索引超出范围异常”

堆栈跟踪:

我们没有使用农场或集群,我也没有在应用程序中使用任何密码学。

这似乎发生在幕后的 .Net 类中。

我认为这与视图状态有关,但我不知道为什么会抛出这个。

有任何想法吗?

0 投票
1 回答
4468 浏览

.net - 视图状态 MAC 验证失败

我目前收到此错误:

视图状态 MAC 验证失败。如果此应用程序由 Web Farm 或集群托管,请确保<machineKey>配置指定相同的 validationKey 和验证算法。AutoGenerate 不能在集群中使用。

我找到了多种解决此错误的方法。我们目前使用的解决方案是在机器级别添加静态 MachineKey 字段,并使用静态验证密钥和解密密钥。

此解决方案是否适用于 .NET 3.5?有没有更优雅的解决方案?

0 投票
9 回答
14849 浏览

c# - selectedIndex 在回发期间丢失 - ASP.NET

我有一个列表框控件:

后面的代码类似于:

我的问题是,当我的页面收到回传时(当用户在列表框中进行选择时),选择总是“跳转”到列表框中的第一项,因此我的回调函数中的索引变量始终为 0。

看起来这可能是一个视图状态问题?如何修复它以使选择索引通过回发保持不变?

没有 ajax,这是 .NET 1.0。

谢谢。

编辑 1 JohnIdol 让我更近了一步,如果我将数据源从原来的 DataTable 切换到 ArrayList,那么一切正常......会导致这种情况吗?

编辑 2事实证明,我的 DataTable 有多个相同的值,因此索引被视为与具有相同值的所有项目相同......感谢那些帮助的人!

0 投票
1 回答
8854 浏览

asp.net - asp.net viewstate 加密

我有几个关于在 asp.net 3.5 中何时以及如何加密视图状态的问题。例如,如果我的 web.config 中有一个机器密钥条目,例如:decryptionKey="AutoGenerate,IsolateApps" validation="AES" decryption="Auto" />

此时视图状态是否加密?或者我还需要在页面部分中指定 viewStateEncryptionMode 吗?

此外,是否可以加密表单身份验证 cookie,但不能同时加密视图状态?

谢谢你的帮助。

0 投票
2 回答
862 浏览

asp.net - 客户端通过每个请求通过多个 IP 连接时 ViewState 解码失败

我们的网站有一个半奇怪的问题。

一致地,来自 1 个匿名 * 用户会发生以下错误:

异常类型:System.FormatException

异常消息:Base-64 字符数组的长度无效。

经过一番调查,用户似乎正在使用某种形式的负载平衡防火墙,因为 IIS 日志显示来自 2 个不同(但连续)IP 的请求。

据我所知,禁用“ViewStateMAC”应该可以解决这个问题。

但是我不确定,并且没有任何方式与用户进行测试,我觉得有点不愿意继续这样做。

有没有人遇到过类似的问题?你是怎么对付他们的?

服务器详情:

从单个 IP 运行的单个服务器 (Win2003)。

更新:

据我所知,ViewStateMAC 仅适用于服务器端。我的问题是由于客户发回具有多个 IP 的单个页面。

* 但来自 IIS 日志确定的相同 2 个 IP。用户也没有恶意。

0 投票
2 回答
4544 浏览

asp.net - 动态加载不同控件时加载视图状态失败

我有一个aspx 页面,它在回发时动态加载一些控件(即当点击事件发生时)并将它们添加到占位符中。根据单击的内容,需要加载一组不同的控件。
这第一次完美运行,但是当我清除占位符的控件并尝试动态加载一组不同的控件时,我收到以下错误:“加载视图状态失败。正在加载视图状态的控件树必须与控件树匹配在上一个请求期间用于保存视图状态。”

即使我执行 ViewState.Clear(),也会发生这种情况。

有没有办法做到这一点?

0 投票
4 回答
9014 浏览

.net - 带有页面刷新和书签的 ASP.NET ViewState 回发

ASP.NET ViewState 功能有时可能是一把双刃剑。我的大部分项目都依赖它,它大大加快了开发速度。

我的问题是,有时用户会尝试刷新页面,这会导致视图状态丢失,有时用户可能想要为页面添加书签,但是当取回时,视图状态将丢失。

当用户尝试刷新页面时,现代浏览器将显示一个愚蠢的对话框,该页面是根本不希望的 POST 操作(例如 asp 回发)的结果。

我想知道他们是一种继续使用 ViewState 和回发模型但没有刷新对话框缺点的方法。(如果可能的话,为页面添加书签。)

我可能想要做的一个例子是在它们旁边有一个带有记录和复选框的页面,用户可以选择检查他们想要删除的所有记录,然后单击删除按钮。用户单击删除后,记录在服务器上进行分析,新页面列出所有使用确认删除按钮选择的记录。现在,如果用户单击刷新,他们会得到这个愚蠢的框来确认他们是否要发布。

我知道 ViewState 是使用 Post Back 模型的结果,这意味着大多数 asp.net 页面都是 POST 操作的结果,但我想知道是否有任何解决方法。

我认为可能有效的解决方法:
在 Page_Unload 事件中,在使用唯一 id 的会话中保存视图状态,并将用户重定向到具有唯一 id 作为查询字符串参数的同一页面,在页面加载后使用 url 中的唯一 id视图状态从会话中加载并注入当前页面。这种方法将允许用户刷新页面并始终返回相同的结果。

PS 我知道我可以使用Response.Redirect()和/或查询字符串,但我想使用简单的ViewState