Использование действия формы внутри runat = "server" - PullRequest
0 голосов
/ 15 февраля 2012

Я разрабатываю страницу, на которой будет элемент управления загрузкой.Управление довольно сложное и не выполняет обратную передачу во время загрузки файлов.Он отлично работает, когда не находится в теге формы с runat="server", поскольку у него есть своя собственная форма с действием публикации, которое будет отправлять в файл Ashx.

Проблема в том, что теперь я хочу поместить этот элемент управления встраница среди других элементов управления asp.net, которые работают через runat="server".Это означает, что все элементы управления вокруг него должны быть в теге формы с runat="server".

Вот форма, в которой работает элемент управления:

<form action="MyFileTransfer.ashx" method="post" enctype="multipart/form-data">

   // buttons etc.

</form>

Хотя я и положилНа моей главной странице с <form runat="server"></form> упаковкой всего содержимого у меня возникают проблемы.

Как лучше всего подойти к этому и что вы порекомендуете?

Ответы [ 4 ]

1 голос
/ 15 февраля 2012

Я не уверен, что понимаю, что именно запускает загрузку, но, скажем, какая-то кнопка выполняет отправку формы.Обычно это страница, на которой включены все ваши элементы управления, но вы хотите, чтобы она отправляла на MyFileTransfer.ashx.

Так что одним из решений будут следующие шаги, которые вам придется выполнить на стороне клиента с помощьюJavaScript.

  1. Динамически создать невидимое IFRAME

  2. Установить целевую форму для идентификатора IFRAME

  3. Сохранить старое действие формы

  4. Установить действие формы на MyFileTransfer.ashx

  5. Отправить форму

  6. Удалить цель из формы

  7. Восстановить старое действие формы.

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

Кстати.Я предполагаю, что вы уже используете вложенные формы, которые не разрешены.Элемент FORM не может быть вложенным, какой-то браузер позволит вам это сделать, но это не значит, что вы должны это делать.

0 голосов
/ 15 февраля 2012

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

Одним из возможных решений является добавление элемента управления загрузкой в ​​iframe. И поскольку элемент управления может измениться после обновления, вы создаете сценарий, который автоматически обновляет высоту и ширину элемента iframe после публикации. .

Относительно изменения высоты iframe:

Прокрутка iframe с боковой панелью главной страницы

сделать высоту iframe динамической на основе содержимого внутри - JQUERY / Javascript

Кстати, iframe - неплохая идея, другие подобные элементы управления используют загрузку флэш-памяти внутри iframe для загрузки. Вы также можете сделать это с помощью внутреннего диалога, чтобы открыть этот iframe, как содержание iframe в этих примерах http://highslide.com/#examples

0 голосов
/ 15 февраля 2012

Лучше использовать панель обновления AJAX вокруг загрузки

0 голосов
/ 15 февраля 2012

Я думаю, вы можете разместить 2 формы на одной странице.Нет ошибки, пока только один имеет runat = "server"

Следующая статья описывает более подробно: Программирование на основе форм в ASP.NET .

...