我正在研究一个旧式ASP.NET应用程序,该应用程序在单个网页上呈现两种形式。每个表单都实现自己的__VIEWSTATE
字段。
由于Chrome v63重复的字段名称在控制台中引发错误:
找到2个具有唯一ID #__VIEWSTATE的元素
我无法重写应用程序以删除重复的表格。是否有另一种方法可以重命名__VIEWSTATE
字段,或者其他一些解决方法?
答案 0 :(得分:1)
在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;
}
}
答案 1 :(得分:0)
如果这些表单的控件之间没有服务器端交互,则作为摆脱第二种表单的另一种方法,可以将其移动到单独的ASPx页面/表单并通过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。