Почему атрибут действия формы пуст на рабочем сервере? - PullRequest
2 голосов
/ 12 апреля 2010

После развертывания приложения ASP.NET WebForms на производственном сервере некоторые из вызовов ajax перестали работать для меня. После некоторой отладки я обнаружил, что следующая инструкция (во внутреннем методе клиента WebForm_DoCallback) вызывает проблему:

xmlRequest.open("POST", action, true);

Проблема, похоже, заключалась в том, что переменная действия была пустой, поэтому после проверки рендеринга HTML я обнаружил, что тег формы, отображаемый на рабочем сервере, выглядит следующим образом:

<form method="post" action="" id="Form1">

Однако на компьютере разработчика я получаю следующее:

<form method="post" action="default.aspx" id="Form1">

Итак, почему action-attibute отображается на моем dev.machine, а не на рабочем сервере? Кажется, это относится только к одной конкретной веб-форме, когда я смотрю на другие страницы, атрибут действия отображается правильно.

Любые предложения или идеи будут полезны!

Ответы [ 3 ]

2 голосов
/ 18 июня 2011

У меня тоже есть эта проблема. Я установил dot net framework 4 на производственном сервере Windows 2003 R2, запустил приложение, работающее на IIS6, установил его фреймворк на 4.0, поместил его в собственный пул приложений, а потом получил. Я также заметил, что jscript не загружает мою страницу входа в систему, так что, возможно, это проблема безопасности?

Интересно, что когда я перехожу на страницу по умолчанию, выбирая URL сайта http://mysite действие не положено Но когда я перехожу туда напрямую, используя реальную страницу (даже при том, что она отображает точно такой же контент), это корректно вводит действие.

Во всяком случае, мой обходной путь должен был установить make runat = server (возможно, это уже было), а затем установить атрибут Action на сервере в текущий Page.Path (могло быть иное свойство, я забыл) и это решило эту конкретную проблему.

Однако я натолкнулся на документ с критическими изменениями для платформы dot net 4, в котором говорится об исключении атрибута action: http://www.asp.net/learn/whitepapers/aspnet4/breaking-changes см. раздел «Обработчики событий могут не вызываться в документе по умолчанию в интегрированном режиме IIS 7 или IIS 7.5»

0 голосов
/ 12 апреля 2010

ASP.NET в .NET 3.5 с пакетом обновления 1 представил некоторые критические изменения, касающиеся HTMLForm , поэтому, возможно, стоит проверить, что оба сервера имеют одинаковую версию платформы.

"Предыдущие версии ASP.NET всегда игнорируется атрибут действия, если он был присутствовать в декларативной разметке для элемент. Разработчики должны удалить атрибут действия из их декларативная разметка для возврата к оригинальное поведение, где ASP.NET рендерит обратный URL. "

Стоит выстрел.

0 голосов
/ 12 апреля 2010

Я, вероятно, далеко, но так как вы спросили какие-либо предложения ...

Я не знаю много о ASP, но в PHP переменные post передаются из атрибута name входных данных, а не из атрибута id самой формы. Например:

<form id="test" method="post" action="test.php">
    <fieldset>
        <input name="firstname" type="text" />
        <input name="lastname" type="text" />
    </fieldset>
</form>

И на стороне сервера, если вы сделали:

 print_r($_POST);

Вы получите:

 Array (
    [firstname] => Joe
    [lastname] => Smith
 )

Кроме этого, единственное, что приходит на ум, это:

  1. Убедитесь, что ваша форма проверена (сам HTML),
  2. Проверьте, установлен ли ваш DTD на Строгий или Переходный,
  3. Проверьте, не связана ли проблема с браузером, путем тестирования нескольких переменных,
  4. Добавьте type="hidden" вход с предустановленным значением, чтобы посмотреть, вернется ли он на сервер.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...