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

Found 2 elements with non-unique id #__VIEWSTATE

我正在开发一个遗留 ASP.NET 应用程序,它在一个网页上呈现两个表单。每个表单都有自己的 __VIEWSTATE 字段。

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

Found 2 elements with non-unique id #__VIEWSTATE

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

Page class 中有两种保存和加载视图状态的方法。通过覆盖这两个方法并将它们设置为使用另一个隐藏的文件,您可以为该页面重命名 __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;
    }
}

如果这些表单的控件之间没有服务器端交互性,作为摆脱第二种表单的另一种方法,可以将其移动到单独的 ASPx page/form 并通过iframe:

伪代码:

旧 2 表单页面(不确定,怎么可能):

<form id="form1" runat="server">
    Root Page - Form 1
</form>
<form id="form2" runat="server">
    Root Page - Form 2
</form>

新建 2 个表单页面:

<form id="form1" runat="server">
    Root Page - Form 1
</form>
<%--
<form id="form2" runat="server">
    Root Page - Form 2
</form>
--%>
<iframe src="Nested.aspx"></iframe>

Nested.aspx:

<form id="form2" runat="server">
    Root Page - Form 2
</form>

至于上述 Google Chrome 错误,这是 newer feature 较新浏览器版本的错误。