发布表单时使用嵌套的主页时出错

时间:2014-09-15 08:46:22

标签: asp.net

经过一些艰难的错误研究后,我发现了我的问题的原因,我不明白。我有一个页面,其中包含位于嵌套母版页内的表单控件。每当我尝试运行表单时,都会遇到此错误:

The state information is invalid for this page and might be corrupted.
[FormatException: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters. ]

如果我选择将表单作为一个干净的页面运行而没有任何对主页的引用,那么它就是完美的。

我尝试了以下解决方案但没有运气:

  • 我在web.config中添加了validationKey,
  • 我已经设置了enableEventValidation =“true”,enableViewState =“true”,并按照MSDN文档中的说明保留了enableViewStateMac =“true”,
  • 我添加了一个viewStateEncryptionMode =“true”,
  • 我还在web.config中添加了一个maxPageStateFieldLength =“400”。

你们有没有解释为什么会出现这种错误以及如何解决它的一些建议?

2 个答案:

答案 0 :(得分:0)

此错误可能由多种原因引起,并且很难在StackOverflow这么小的空间中找到问题的根源。但是,如果您从了解由于视图状态已损坏而引发此错误的事实开始,那么您应该能够调查您的环境并找出导致视图状态损坏的原因...您可以通过关闭viewstate来确认这一点并检查错误是否仍然发生。可能发生此错误的几个原因

  1. 您正在使用IIS动态压缩,配置出现问题
  2. 视图状态是巨大的...检查页面的足迹并检查视图状态字段的大小,一些防火墙和/或代理截断视图状态,如果它超过特定大小...您可以通过将视图状态分成以下来轻松解决此问题多个隐藏字段。检查MaxPageStateFieldLength文档

答案 1 :(得分:0)

我设法绕过这个问题而不解决它。正如我在我的问题中提到的,我认为这个问题与我使用嵌套母版页有关。我设法以这种方式绕过它。

首先,我创建了一个普通页面,但没有引用任何包含输入表单和提交方法的母版页。然后我添加了一个div到第二页作为内容持有者,作为子母版页我使用JavaScript加载表单页面和jQuery UI库' modal'。

这是一个片段:

内容暂停页面

$(document).ready(function () {
    $('a.edit-post').removeAttr('href').css('cursor', 'pointer').click(function () {
        var linkid = $(this).attr('rel');

        $('#edit-post').load('<%=Utilities.Helpers.ResolveUrl("~/article.aspx?id=' + linkid + '")%>').dialog({
            closeOnEscape: false,
            closeText: 'close',
            draggable: false,
            modal: true,
            width: 700
        });
    });
});
<div id="edit-post"></div>

<强> article.aspx

<!DOCTYPE html>

<html>
<head runat="server">
    <title>Edit your post</title>
</head>
<body>
    <form id="EditPostForm" runat="server">
        The inputs...
    </form>
</body>
</html>

它不是真正问题的解决方案,但是它使用了另一种方法来消除问题的影响,然后通过消除继承任何母版页的视图状态的需要最初的意图。你们怎么看待这个?