c # Форма отправляет ошибку состояния представления - PullRequest
1 голос
/ 17 сентября 2009

Я пытаюсь настроить функцию входа в систему в C #, где у меня есть форма по умолчанию.aspx, которая отправляет сообщение в Login.aspx, где запускается логика.

Но когда форма публикуется в Login.aspx, я получаю ошибку подтверждения состояния просмотра MAC. Что это и почему?

Когда я вызываю Login.aspx напрямую из браузера, я не получаю сообщение об ошибке, только когда форма публикует себя в нем.

Код формы Default.aspx:

    <form id="form1" runat="server" method="post" action="Login.aspx">
<div>
  <input type="text" name="lgn" id="lgn" runat="server" /> Login<br />
  <input type="password" name="pwd" id="pwd" runat="server" /> Password<br /><br />
  <input type="submit" name="submit" id="submit" value="Login" runat="server" />

</div>
</form>

Существуют ли какие-либо ограничения на размещение формы на другой странице в том же проекте, или есть какие-либо настройки, которые я пропустил?

Заранее спасибо

Я решил это, используя свойство PostBackURL для кнопки asp: вместо свойства action в теге формы, например:

<asp:Button id="btnSubmit" runat="server" text="login" PostBackUrl="~/Login.aspx" />

Ответы [ 3 ]

2 голосов
/ 17 сентября 2009

Я думаю, что вы хотите использовать следующее

<asp:Button ID="btnClickie" Text="Click Me" runat="server" PostBackUrl="~/Login.aspx" />

вместо того, чтобы устанавливать действие для формы в Login.aspx, но вам придется извлечь данные предыдущей страницы. Вы можете зарегистрировать предыдущую страницу с этим ...

<%@ PreviousPageType VirtualPath="~/Page1.aspx" %>

Тогда вы сможете извлечь элементы управления с другой страницы (при условии, что на них есть runat = "server"). По крайней мере, в теории.

http://aspalliance.com/135 содержит хорошую статью о ViewState, но для этой проблемы у него нет пистолета для курения.

1 голос
/ 17 сентября 2009

Обычный способ работы этих форм - отправлять сообщения обратно себе (а затем, возможно, перенаправить на другую страницу).

0 голосов
/ 17 сентября 2009

Это может произойти, если у вас есть несколько веб-серверов с маршрутизаторами балансировки нагрузки впереди. Я написал в блоге об этом. Прочитайте это здесь . В основном вам нужно добавить параметр machineKey в ваш web.config, указав ключ проверки и расшифровки. Это гарантирует, что он одинаков на всех машинах. Если ничего не указано, оно будет сгенерировано автоматически.

...