2011-01-14 6 views
1

У меня есть образец страницы Redirect.aspx со следующим содержимым;Не удалось выполнить проверку MAC-адреса viewstate при отправке формы на загрузку страницы

<body onload="document.forms.container.submit()"> 
    <form id="container" runat="server" method="post" name="container"> 
     <input type="hidden" value="<%=Request["APP_ID"]%>" name="APP_ID" /> 
    </form> 
</body> 

метод Page_Load следующий:

protected void Page_Load(object sender, EventArgs e) 
{    
    container.Action = Configuration.Instance.PageToRedirect; 
} 

К этой странице Redirect.aspx, я направлен от некоторой внешней страницы. В контексте запроса у меня есть ключ APP_ID, который передается с этой внешней страницы. Затем я хочу передать это значение APP_ID с помощью POST на другую страницу, которая определена в конфигурации. К сожалению, я получаю такую ​​ошибку при перенаправлении:

Не удалось выполнить проверку MAC-адреса viewstate. Если это приложение размещено на веб-сайте Ферма или кластер, убедитесь, что конфигурация указывает та же валидацияKey и валидация . AutoGenerate не может использоваться в кластере.

Я не хочу отключать проверку состояния просмотра (<pages enableViewStateMac="false">), потому что это не «решение», которое я хочу применить.

Кроме того, я не понимаю, почему я получаю такую ​​ошибку. Может ли кто-нибудь получить меня через это? Есть ли другой способ автоматически отправить форму на событие Page_Load?

С уважением

ответ

0

я думаю, вы можете редактировать страницы тег в web.config с:

<pages maxPageStateFieldLength="512"> 

возможно, это может решить вашу проблему ...

+0

К сожалению, это не исправление, но спасибо в любом случае – jwaliszko

1

2 идеи:

  1. Проверьте, действительно ли значение <% = Запрос ["APP_ID"]%> фактически вычислен, и вы не являетесь t проводка это как строка. Вы не можете публиковать любые теги html-тегов, такие как «<» или «>». Если значение не вычисляется, это означает, что вы не привязываете страницу. Быстрое решение будет помещать this.DataBind() в ваш код за файлом.

  2. Создайте MachineKey вручную в вашем web.config (вы можете использовать онлайн-инструмент для этого: http://aspnetresources.com/tools/machineKey). В одном из моих приложений он решил мои проблемы, даже если я не в веб-ферме (теперь я не помню подробностей проблемы).

Также просьба уточнить это: «Далее, я хочу передать это значение APP_ID с помощью POST на другую страницу, которая определена в конфигурации» вы уверены, что ошибка происходит, когда вы делаете редирект как вы заявляете, или это в этом посте? Вы пытаетесь перекрестно отправить значение другому приложению в другом домене? Это невозможно.

+0

Здравствуйте, 1. Я не использую html-теги в строке POST. Кроме того, рассчитываются значения. 2. Я создал запись machineKey и вставил в web.config, но это не помогло. Когда дело доходит до выяснения: я пытаюсь выполнить POST-данные для приложения в том же домене: из http: // localhost/app/Redirect.aspx to http: //localhost/app/NewPage.aspx. Ошибка возникает сразу после выполнения функции javascript document.forms.container.submit(). – jwaliszko

+0

Хорошо, мне пришлось сначала проверить эти возможности. Также я прочитал, что тег формы не должен иметь никакого атрибута «действия», я не знаю сейчас, если ASP.net создает этот атрибут для вас. – Durden81

+1

Самое смешное, что если включить этот атрибут enableViewStateMac = "false" в тег <% @ Page ... />, все будет работать. Атрибут действия, похоже, работает правильно. Единственное, что такое решение имеет проблемы с безопасностью, поэтому я должен избегать этого, и я не знаю, что происходит;]. – jwaliszko