Почему поведение Response.Write варьируется в данном сценарии? - PullRequest
3 голосов
/ 16 июня 2010

Когда я размещаю страницу, используя следующий код, Response.write ("Hey") не записывает содержимое ("Hey") на родительскую страницу

<form method="post" name="upload" enctype="multipart/form-data"
action="http://localhost:2518/Web/CrossPage.aspx" >
<input type="file" name="filename" />
<input type="submit" value="Upload Data File" name="cmdSubmit" />
</form>

Но когда я использую следующий код и отправляю данные, Response.write ("Hey") можно получить на родительской странице

 HttpWebRequest requestToSender = (HttpWebRequest)WebRequest.Create("http://localhost:2518/Web/CrossPage.aspx");
 requestToSender.Method = "POST";
 requestToSender.ContentType = "multipart/form-data";

 HttpWebResponse responseFromSender = (HttpWebResponse)requestToSender.GetResponse();
 string fromSender = string.Empty;

 using (StreamReader responseReader = new StreamReader(responseFromSender.GetResponseStream()))
    {
        fromSender = responseReader.ReadToEnd();
    }

В CrossPage.aspx у меня есть следующий код

 if (!Page.IsPostBack)
    {
        NameValueCollection postPageCollection = Request.Form;

        foreach (string name in postPageCollection.AllKeys)
        {
            Response.Write(name + " " + postPageCollection[name]);
        }

        HttpFileCollection postCollection = Request.Files;
        foreach (string name in postCollection.AllKeys)
        {
            HttpPostedFile aFile = postCollection[name];
            aFile.SaveAs(Server.MapPath(".") + "/" + Path.GetFileName(aFile.FileName));
        }

        Response.Write("Hey");
    }

У меня нет кода в событии Page_Load родительской страницы .?

В чем может быть причина? Мне нужно написать «эй» на родительскую страницу, используя первый сценарий. Оба приложения принадлежат другому домену.

Редактировать:"Привет" будет из CrossPage.aspx. Мне нужно написать это обратно на родительскую страницу

когда я публикую сообщение с использованием действия формы, после обработки события Page_Load () в CrossPage.aspx URL-адрес указывает на «http://localhost:2518/Web/CrossPage.aspx", что означает, что приложение все еще находится в CrossPage.aspx и не было перемещено на родительскую страницу.

Ответы [ 5 ]

1 голос
/ 24 августа 2010

Вы почти достигли причины самостоятельно:

когда я публикую сообщение с использованием действия формы, после обработки события Page_Load () в CrossPage.aspx, URL-адрес указывает на "http://localhost:2518/Web/CrossPage.aspx" это означает, что приложение все еще находится в CrossPage.aspx и не перемещается на родительскую страницу.

Ваша форма переводит пользователя в CrossPage.aspx, поэтому родительская страница исчезла, теперь предыдущаястраница в истории пользователя.

Похоже, вы пытаетесь выполнить какую-то асинхронную загрузку файла. Попробуйте поискать примеры загрузки файлов AJAX, например: Как я могу загружать файлы асинхронно?

0 голосов
/ 06 февраля 2013

Я бы предложил изменить CrossPage.aspx на .ashx HttpHandler. Page.IsPostBack может работать некорректно, поскольку ожидает ViewState и другие скрытые поля формы ASP.net, которые сообщают ему, что это сообщение обратно из формы ASP. Вам также не нужно проходить через весь функционал жизненного цикла страницы, через который проходит ASP.net Webforms.

0 голосов
/ 16 июня 2010

Вероятно, это потому, что у вас есть код в if (!Page.IsPostBack) блок? этот код будет выполнен, только страница не загружена на постбэк.

(HttpWebResponse)requestToSender.GetResponse(); вызовет запрос GET, поэтому ваш код работает, когда вы вызываете Crosspage.aspx, используя этот код.

0 голосов
/ 16 июня 2010

Вы рассматриваете страницу как сервис. НАПРИМЕР. Начните с ParentPage.aspx> передайте данные в ServicePage.aspx для обработки> запишите ответ обратно в ParentPage.aspx для отображения.

Вы получили его для работы с C #, передав обязанность обратно на сервер, где состояние можно легко поддерживать при пересечении границ страницы. Это не так просто, когда вы пытаетесь решить проблему без C #. Это не приложение Winform. Как указало NimsDotNet, изменение метода на «получить» приблизит вас, но вы будете перенаправлены на CrossPage.aspx и потеряете вызывающую страницу.

Вы сказали, что находитесь в "разных доменах". Под этим я думаю, что вы имеете в виду использование двух разных серверов IIS. Решение C # все еще должно работать в этом сценарии, как вы показали. Просто добавьте Response.Write () объекта fromSender. Вы ничего не сказали нам, что делает это технически невозможным. Тем не менее, если вам нужно клиентское решение, вы можете использовать javascript, чтобы выполнить запрос get без перенаправления.

В этой записи показано, как сделать запрос на получение с помощью JQuery.

0 голосов
/ 16 июня 2010

Я говорю, что ваш aFile.SaveAs (Server.MapPath (".") + "/" .... выбрасывает исключение. Попробуйте его закомментировать и протестировать.

ОБНОВЛЕНИЕ:

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

Кроме того, я думаю, что у вас есть try catch оператор, обернутый вокруг всего этого, который ловит exception, так что вы понятия не имеете, что происходит не так.Если это так, никогда не делайте этого. Вы редко хотите поймать exception.

После быстрого взгляда на логику сохранения, замените "/" на @"\". Server.MapPath("."), вернув путь, используя backкосая черта не косая черта.

...