2012-06-27 5 views
0

У меня довольно сложная форма (пользовательский контроль на самом деле) с одним элементом управления текстовым полем, который должен НЕ отправляться обратно. Есть ли способ удалить элемент управления из сообщения? Да, это текстовое поле доступно для редактирования.Не возвращайте текстовое поле

Дополнительная информация: Это форма обработки кредитной карты, поэтому «final» submit отправит на страницу другого сайта. Тем не менее, до этого есть много обработки на стороне сервера, которая продолжается. Я знаю, что я могу переместить текстовое поле номера кредитной карты на другую страницу, но это требование появилось очень поздно, и я попытаюсь не переделывать много вещей.

+0

Полагаю, вы не можете поместить текстовое поле в другой форме на той же странице? –

+0

ASP.NET не допускает нескольких форм. – jaypeagi

+0

Я смущен. Вы говорите, что не хотите, чтобы значение было доступно при обратной передаче, или сам элемент управления текстовым полем выполняет автоматическую обратную передачу? – Josh

ответ

0

Так ситуация такова, что у вас есть форма, которая отображается в браузере пользователя с действием, указывая на другой сайт, и вы должны убедиться, что один из поля формы не будут отправляться при отправке формы.

Звучит так, как будто вы не можете в этом случае сделать абсолютно уверенным, что значение не опубликовано. Существует множество различных способов решения этой проблемы с помощью javascript (отключить ввод, четкое значение и т. Д. Перед отправкой), но если скрипты отключены, я думаю, вам не повезло.

Но поскольку вы можете подготовиться к отправке формы на другой сервер (изменить действие по форме или кнопке включения с помощью PostBackUrl), я думаю, вы также можете установить для свойства Enabled в текстовом поле значение false. Это означает, что он больше не может быть отредактирован на последней странице перед отправкой на другой сервер. Или вы можете скрыть текстовое поле a (так оно и не сохранилось) и вместо этого отобразить поле как метку или литерал.

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

Если вы не можете точно сказать, какой будет последний ответ на ваш сервер, то я думаю, что вам не повезло без значительных изменений. Извините, что я был неудачником. Некоторые, казалось бы, тривиальные вещи просто сложны с веб-формами Asp.Net.

Возможно, вы можете добавить отдельную страницу, на которой вы заполняете только те данные, которые вам нужно отправить на другой сервер, и иметь такую ​​«страницу подтверждения». На этой странице вы можете отключить viewstate, показать все обобщенные данные (используя метки и литералы и т. Д.), А фактические данные для публикации могут быть включены в форму в виде скрытых полей. Затем эта форма будет отправляться на другой сервер, когда пользователь «Подтверждает».

+0

Спасибо, что нашли время, чтобы написать такой отличный ответ. На самом деле я поступил с последним предложением, которое вы сделали. – DaveInClt

2

Самый простой способ - использовать вход html, а не ASP TextBox. Они недоступны из кода, если на них не установлено runat="server".

Или использовать ViewState свойство (http://msdn.microsoft.com/en-us/library/system.web.ui.control.enableviewstate.aspx)

+3

Поля ввода HTML по-прежнему доступны для обратной передачи, если у них есть атрибут «имя». Они просто не могут быть вызваны по ID в коде (вы должны сделать что-то вроде 'Request.Form [" txtName "]' вместо 'txtName.Text'. –

Смежные вопросы