我最近在我的网站上实现了ELMAH,我注意到我们经常收到“Base-64字符串中的无效字符”错误。我自己从来没有触发它,没有一个用户抱怨它,所以我不知道发生了什么。从我能够找到它的一点点来看,似乎视图状态可能变得太大或变得腐败或者其他东西。有谁知道是什么原因造成的,以及如何预防?以下是我认为YSOD中的相关内容。
[FormatException: Invalid character in a Base-64 string.]
[ViewStateException: Invalid viewstate.
[HttpException (0x80004005): The client disconnected.]
我可以对这些错误做些什么,还是应该在ELMAH中过滤它们?
答案 0 :(得分:4)
根据我的经验,这个错误往往是由用户双击触发回发的按钮引起的。第二个回发请求取消第一个回发请求。第一个请求的视图状态仅部分提交,因此无效,但错误无法发送到浏览器,因为它已断开连接,从而触发顶级错误。如果用户做两次事情导致麻烦,这可能是一个更大的问题。否则,可以简单地过滤这些错误。这是在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”/&gt ;.
以上内容适用于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);
});
});
答案 1 :(得分:2)
可能是事情的配置方式。看看这个:
<强>更新强>
尝试并确定它发生的位置。可能有几个可能的原因:
"Invalid Character in Base-64 String" using ASP.NET and C#
asp.net Invalid character in a Base-64 string
在一天结束时,如果正如您所说,它不会在生产中造成任何问题,那么您可以过滤掉这些错误。尝试将EnableViewStateMac设置为false?