首页 > 解决方案 > 找到 2 个具有非唯一 ID #__VIEWSTATE 的元素

问题描述

我正在开发一个旧版 ASP.NET 应用程序,该应用程序在一个网页上呈现两个表单。每个表单都实现了自己的__VIEWSTATE字段。

由于 Chrome v63 重复的字段名称会在控制台中引发错误:

找到 2 个具有非唯一 ID #__VIEWSTATE 的元素

我没有重写应用程序以删除重复表单的奢侈。是否有另一种方法来重命名__VIEWSTATE字段,或者其他一些解决方法?

标签: asp.netwebformsviewstate

解决方案


Page类中有两种方法可以保存和加载视图状态。通过覆盖这两个方法并将它们设置为使用另一个隐藏文件,您可以__VIEWSTATE为该页面重命名。

以下是您的操作方法:

public partial class SamplePage : Page
{
    const string ViewStateHiddenFiledName = "_VIEWSTATE_Page1";

    protected override void SavePageStateToPersistenceMedium(object viewState)
    {
        LosFormatter los = new LosFormatter();
        StringWriter writer = new StringWriter();

        los.Serialize(writer, viewState);

        string serilizedViewState = writer.ToString();

        ClientScript.RegisterHiddenField(ViewStateHiddenFiledName, serilizedViewState);
    }

    protected override object LoadPageStateFromPersistenceMedium()
    {
        string serilizedViewState = Request.Form[ViewStateHiddenFiledName];
        if (serilizedViewState != "")
        {
            LosFormatter los = new LosFormatter();
            return los.Deserialize(serilizedViewState);
        }
        return null;
    }
}

推荐阅读