Asp.net 找到2个具有非唯一id#uu VIEWSTATE的元素
我正在开发一个旧的ASP.NET应用程序,它在一个网页上呈现两个表单。每个表单实现自己的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 以下是您如何做到
\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>