Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 找到2个具有非唯一id#uu VIEWSTATE的元素_Asp.net_Webforms_Viewstate - Fatal编程技术网

Asp.net 找到2个具有非唯一id#uu VIEWSTATE的元素

Asp.net 找到2个具有非唯一id#uu VIEWSTATE的元素,asp.net,webforms,viewstate,Asp.net,Webforms,Viewstate,我正在开发一个旧的ASP.NET应用程序,它在一个网页上呈现两个表单。每个表单实现自己的\u视图状态字段 由于Chrome v63重复的字段名会在控制台中引发错误: 找到2个具有非唯一id#uu VIEWSTATE的元素 我没有必要重写应用程序来删除重复的表单。是否有其他方法可以重命名\u VIEWSTATE字段,或者其他一些解决方法?在页面类中,有两种方法可以保存和加载视图状态。通过覆盖这两个方法并将它们设置为使用另一个隐藏字段,您可以为该页面重命名\uu VIEWSTATE 以下是您如何做到

我正在开发一个旧的ASP.NET应用程序,它在一个网页上呈现两个表单。每个表单实现自己的
\u视图状态
字段

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

找到2个具有非唯一id#uu VIEWSTATE的元素


我没有必要重写应用程序来删除重复的表单。是否有其他方法可以重命名
\u VIEWSTATE
字段,或者其他一些解决方法?

页面
类中,有两种方法可以保存和加载视图状态。通过覆盖这两个方法并将它们设置为使用另一个隐藏字段,您可以为该页面重命名
\uu 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页面/表单,并通过iframe加载:

伪代码:

旧的2个表单页面(不确定如何实现):


根页面-表格1
根页面-表格2
新表格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>

根页面-表格1
Nested.aspx:

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

根页面-表格2

至于前面提到的Google Chrome错误,这是一个较新的浏览器版本。

框架本身添加了
\uu VIEWSTATE
输入字段。即使页面上有多个用户控件,也只有一个ViewState字段。因此,除非您自己添加,否则不应超过1个。@VDWWD-页面上有多个表单元素,我相信每个元素都会创建VIEWSTATE。这是一个ASP.NET 2应用程序。
<form id="form2" runat="server">
    Root Page - Form 2
</form>