首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅在IE 10中无效的ViewState

仅在IE 10中无效的ViewState
EN

Stack Overflow用户
提问于 2013-07-23 16:40:37
回答 1查看 1.7K关注 0票数 3

解决了: IE 10似乎在处理空字符方面有问题。因为我们正在生成大量的代码服务器端,所以缓冲导致列表项数据中的空字符,最终导致ViewState损坏(NULL不是有效的base64字符)。我注意到这一点,因为小数据集上没有发生损坏。

我已经通过在生成列表项时设置Response.Buffer = false 来解决这个问题。我尝试过的其他可能的解决方案:

列表框数据的ListBox.DataSource = new DataView(dataTable) ListBox.DataBind() 。这导致了干净的数据,但在我的例子中,需要对存储过程进行更改()。

<option> -优雅地清除缓冲区,使NULL出现在元素之外。

在做了大量的研究之后,我仍然在我们的web应用程序中被一个无效的viewstate错误所困扰。

概括地说:

  • 我使用了我在网上找到的ViewState审查员,但是它无法解析ViewState,所以没有帮助。第二对返回“不可读数据”。
  • 一致的IE 10只。不会出现在任何其他浏览器中。
  • 在文档模式IE9标准中工作良好(我们正在致力于支持IE10标准)
  • 页面上的两个主要字段(两个列表框)将不能与EnableViewState="False"一起工作,因此解决这一问题的方法并不是理想的选项。
  • 在检查了页面的源代码之后,我在Base64字符串中看到了一个Base64字符。

我的猜测是,ViewState在NUL字符处被截断,错误被抛出,因为预期的ViewState与接收的不一样。然而,我仍然停留在如何验证这一点,缩小导致数据损坏的原因,以及如何解决这个问题。

更新:我在数据集中找到了一个NUL字符,从ViewState中删除这个字符可以解决这个问题。从数据库看,数据看上去完全没有问题。假设[NUL]是一个合法的空字符

观点国家:

代码语言:javascript
复制
...pZmUFBTE[NUL]4NjoxZxAFD1RJQUEt...

列表框中的一个选项:

代码语言:javascript
复制
<option value="201:1" title="Pr[NUL]emier 20">Premier 20</option>

现在我想我需要找出腐败在哪里发生的?

代码

代码语言:javascript
复制
if (!IsPostBack)
{
    System.Web.UI.WebControls.ListItem liListItem;

    clsGLOBALGASubscription clsGAS = new clsGLOBALGASubscription(lngSubID);
            DataTable dataTable = clsGAS.ListSelectedProducts(Session["GAID"].ToString().Trim());

    if(dataTable == null)
    {

        lstbAvailable.Items.Add("There are no products available for your account.  Please contact your administrator.");
        btnAdd.Visible = false;
        btnAddAll.Visible = false;
        btnRemove.Visible = false;
        btnRemoveAll.Visible = false;

        }
        else
        {
            if(Session["SelectedProducts"] != null && Session["SelectedProducts"].ToString().Trim().Length != 0)
            {
                foreach(DataRow dataRow in dataTable.Rows)
                {
                    string strConcatIDs = dataRow["CompanyID"] + ":" + dataRow["SeriesID"];
                    liListItem = new ListItem(dataRow["Company"] + " - " + dataRow["Series"], strConcatIDs);
                    liListItem.Attributes.Add("title", String.Format("{0} - {1}", dataRow["Company"], dataRow["Series"]));

                    foreach(string subString in Session["SelectedProducts"].ToString().Split(delimiters))
                    {
                        if(subString == strConcatIDs)
                            if (xraeList)
                                {

                                    foreach (string CarrierHealthItem in XraeCarrierList)
                                    {
                                        string[] CarrierInforArray = CarrierHealthItem.Split(':');
                                        if (CarrierInforArray[0].ToString() == dataRow["CompanyID"].ToString())                                          
                                        {
                                            foundXrae = true;
                                            break;
                                        }
                                    }
                                    if (foundXrae)
                                    {
                                        liListItem.Attributes.CssStyle.Add(HtmlTextWriterStyle.Color, "Red");
                                        liListItem.Attributes.CssStyle.Add(HtmlTextWriterStyle.FontWeight, "bold");
                                        foundXrae = false;
                                    }
                                }
                                lstbSelected.Items.Add(liListItem);
                                bSelectedAlready = true;
                                break;
                            }
                        }

                        if (bSelectedAlready == false)
                        {
                            if (xraeList)
                            {
                                foreach (string CarrierHealthItem in XraeCarrierList)
                                {
                                    string[] CarrierInforArray = CarrierHealthItem.Split(':');
                                    if (CarrierInforArray[0].ToString() == dataRow["CompanyID"].ToString())                                           
                                    {
                                        foundXrae = true;
                                        break;
                                    }
                                }
                                if (foundXrae)
                                {
                                    liListItem.Attributes.CssStyle.Add(HtmlTextWriterStyle.Color, "Red");
                                    liListItem.Attributes.CssStyle.Add(HtmlTextWriterStyle.FontWeight, "bold");
                                    foundXrae = false;
                                }
                            }

                            lstbAvailable.Items.Add(liListItem);
                        }
                        else
                        {
                            bSelectedAlready = false;
                        }
                    }
                }
                else // ...no Selected Products, so just populate lstbAvailable
                {

                    foreach(DataRow dataRow in dataTable.Rows)
                    {

                        liListItem = new System.Web.UI.WebControls.ListItem(dataRow["Company"] + " - " + dataRow["Series"], dataRow["CompanyID"] + ":" + dataRow["SeriesID"]);
                        liListItem.Attributes.Add("title", String.Format("{0} - {1}", dataRow["Company"], dataRow["Series"]));

                        if (xraeList)
                        {
                            foreach (string CarrierHealthItem in XraeCarrierList)
                            {
                                string[] CarrierInforArray = CarrierHealthItem.Split(':');
                                if (CarrierInforArray[0].ToString() == dataRow["CompanyID"].ToString())
                                {
                                    foundXrae = true;
                                    break;
                                }
                            }

                            if (foundXrae)
                            {
                                liListItem.Attributes.CssStyle.Add(HtmlTextWriterStyle.Color, "Red");
                                liListItem.Attributes.CssStyle.Add(HtmlTextWriterStyle.FontWeight, "bold");
                                foundXrae = false;
                            }
                        }
                        lstbAvailable.Items.Add(liListItem);
                    }
                }
            }
        }
    }

错误:

代码语言:javascript
复制
The state information is invalid for this page and might be corrupted.

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 

[FormatException: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or a non-white space character among the padding characters. ]
System.Convert.FromBase64String(String s) +0
System.Web.UI.ObjectStateFormatter.Deserialize(String inputString) +90
System.Web.UI.Util.DeserializeWithAssert(IStateFormatter formatter, String serializedState) +60
System.Web.UI.HiddenFieldPageStatePersister.Load() +173

[ViewStateException: Invalid viewstate. 
Client IP: 10.128.3.10
Port: 44359
Referer: http://LTCarrierProduct.aspx?Title=Customize Carriers and Products&XraeValidation=Invalid
Path: /LTCarrierProduct.aspx
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)
ViewState: /wEPDwUJNzE5MTU3Njg2D2QWBgIBDxYCHgRUZXh0BY4BPExJTksgaHJlZj0nU3R5bGVzL0xUU3R5bGVzLmNzcycgdHlwZT0ndGV4dC9jc3MnIHJlbD0nc3R5bGVzaGVldCcgLz48TElOSyBocmVmPSdTdHlsZXMvMDE1ODFfTFRTdHlsZXMuY3NzJyB0eXBlPSd0ZXh0L2NzcycgcmVsPSdzdHlsZXNoZWV0JyAvPmQCAw8WAh8AZWQCBQ9kFgQCAQ8QZA8WxgFmAgECAgIDAgQCBQIGAgcCCAIJAgoCCwIMAg0CDgIPAhACEQISAhMCFAIVAhYCFwIYAhkCGgIbAhwCHQIeAh8CIAIhAiICIwIkAiUCJgInAigCKQIqAisCLAItAi4CLwIwAjECMgIzAjQCNQI2AjcCOAI5AjoCOwI8Aj0CPgI/AkACQQJCAkMCRAJFAkYCRwJIAkkCSgJLAkwCTQJOAk8CUAJRAlICUwJUAlUCVgJXAlgCWQJaAlsCXAJdAl4CXwJgAmECYgJjAmQCZQJmAmcCaAJpAmoCawJsAm0CbgJvAnACcQJyAnMCdAJ1AnYCdwJ4AnkCegJ7AnwCfQJ+An8CgAECgQECggECgwEChAEChQEChgEChwECiAECiQECigECiwECjAECjQECjgECjwECkAECkQECkgECkwEClAEClQEClgEClwECmAECmQECmgECmwECnAECnQE...]

[HttpException (0x80004005): The state information is invalid for this page and might be corrupted.]
System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError) +177
System.Web.UI.HiddenFieldPageStatePersister.Load() +11367569
System.Web.UI.Page.LoadPageStateFromPersistenceMedium() +11447671
System.Web.UI.Page.LoadAllState() +56
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +11441698
System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +11441214
System.Web.UI.Page.ProcessRequest() +269
System.Web.UI.Page.ProcessRequest(HttpContext context) +167
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +625
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +270

来自服务器上的ie.browsers:

代码语言:javascript
复制
<browser id="IE6to9" parentID="IE5to9">
  <identification>
    <capability name="majorversion" match="[6-9]" />
  </identification>
  <capture></capture>
  <capabilities>
      <capability name="jscriptversion"          value="5.6" />
    <capability name="ExchangeOmaSupported"    value="true" />
  </capabilities>
</browser>
EN

回答 1

Stack Overflow用户

发布于 2013-07-23 19:30:12

不确定这是否有帮助,但这是我们在ie.browser中的附加部分

代码语言:javascript
复制
 <browser id="IE5to9" parentID="IE">
    <identification>
        <capability name="majorversion" match="^[5-9]|[1-9]\d+" />
    </identification>

    <capture>
    </capture>

    <capabilities>
        <capability name="activexcontrols"     value="true" />
        <capability name="backgroundsounds"    value="true" />
        <capability name="cookies"             value="true" />
        <capability name="css1"                value="true" />
        <capability name="css2"                value="true" />
        <capability name="ecmascriptversion"   value="1.2" />
        <capability name="frames"              value="true" />
        <capability name="javaapplets"         value="true" />
        <capability name="javascript"          value="true" />
        <capability name="jscriptversion"      value="5.0" />
        <capability name="msdomversion"        value="${majorversion}${minorversion}" />
        <capability name="supportsCallback"    value="true" />
        <capability name="supportsFileUpload"  value="true" />
        <capability name="supportsMultilineTextBoxDisplay" value="true" />
        <capability name="supportsMaintainScrollPositionOnPostback" value="true" />
        <capability name="supportsVCard"       value="true" />
        <capability name="supportsXmlHttp"     value="true" />
        <capability name="tables"              value="true" />
        <capability name="tagwriter"           value="System.Web.UI.HtmlTextWriter" />
        <capability name="vbscript"            value="true" />
        <capability name="w3cdomversion"       value="1.0" />
        <capability name="xml"                 value="true" />
    </capabilities>
</browser>

为我们解决了很多问题。试试看。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17816098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档