Найдено 2 элемента с неуникальным идентификатором #__VIEWSTATE - PullRequest
0 голосов
/ 29 июня 2018

Я работаю над устаревшим приложением ASP.NET, которое отображает две формы на одной веб-странице. Каждая форма реализует свое собственное поле __VIEWSTATE.

Поскольку повторяющиеся имена полей в Chrome v63 выдают ошибку в консоли:

Найдено 2 элемента с неуникальным идентификатором #__ VIEWSTATE

Я не могу позволить себе переписать приложение для удаления дублированных форм. Есть ли другой способ переименовать поля __VIEWSTATE или что-то другое?

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Если между элементами управления из этих форм нет серверной интерактивности, в качестве другого способа избавиться от второй формы, можно переместить ее на отдельную страницу / форму 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, то это более новая функция более новых сборок браузера.

0 голосов
/ 02 июля 2018

В классе 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;
    }
}
...