找到 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 较新浏览器版本的错误。
我正在开发一个遗留 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 较新浏览器版本的错误。