5

我最近在我的网站上实施了 ELMAH,我注意到我们经常收到“Base-64 字符串中的无效字符”错误。我自己从来没有触发过它,我们的用户也没有抱怨过它,所以我不知道发生了什么。从我所能找到的一点点来看,似乎视图状态可能变得太大或损坏或其他什么。有谁知道这是什么原因以及如何预防?以下是我认为 YSOD 中的相关线路。

[FormatException: Invalid character in a Base-64 string.]
[ViewStateException: Invalid viewstate. 
[HttpException (0x80004005): The client disconnected.]

我可以对这些错误做些什么,还是应该在 ELMAH 中过滤它们?

4

2 回答 2

4

以我的经验,这个错误往往是由用户双击触发回发的按钮引起的。第二个回发请求取消了第一个。第一个请求的viewstate只是部分提交了,所以是无效的,但是由于已经断开连接,无法将错误发送给浏览器,从而触发了顶层错误。如果用户做某事两次导致麻烦,这可能是一个更大的问题。否则,可以简单地过滤这些错误。这是在 ELMAH 中过滤掉类似错误的一个很好的例子: https ://stackoverflow.com/a/2549509/267448

如果您使用的是 ASP.NET WebForms,这里有一些代码可以在回发期间禁用触发控制:http: //disturbedbuddha.wordpress.com/2007/12/10/disabling-a-trigger-control-during-asynchronous-postback /

请注意,如果您禁用 HTML <input type="submit"> 按钮,它将从您的表单变量中排除,因此您的服务器端 Click 事件不会触发。将其更改为 <input type="button"> 可以解决此问题。在 WebForms 中,这将是 <asp:Button UseSubmitBehavior="False" />。

以上适用于 WebForms AJAX 页面,但这里还有一些我为其他页面提出的 jQuery。

$(function () {
    $("a[href^='javascript']").click(function (event) {
        if (event.target.disabled)
            return false;
        event.target.disabled = true;
        setTimeout(function () {event.target.disabled = false;}, 250);
    });
});
于 2012-02-14T17:07:14.107 回答
2

这可能是事情的配置方式。看看这个:

http://groups.google.com/group/elmah/browse_thread/thread/ec9c4bdddaa1a9e/9108b48d3def87db?lnk=gst&q=viewstate+elmah#9108b48d3def87db

更新

尝试并确定它发生在哪里。可能有几个潜在的原因:

使用 ASP.NET 和 C# 的“Base-64 字符串中的无效字符”

asp.net Base-64 字符串中的无效字符

归根结底,如果如您所说,它没有在生产中引起任何问题,那么您可以过滤掉这些错误。尝试将 EnableViewStateMac 设置为 false?

于 2011-01-26T22:08:34.040 回答