Я пытаюсь опубликовать данные в iframe в asp.net.Пост выполняется с использованием HTTPRequest и HTTPResponse. - PullRequest
1 голос
/ 23 сентября 2011

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

private static string PostDataToServerAndGetResponse()
{
Uri uri = new Uri("http://www.amazon.com/exec/obidos/search-handle-form/102-5194535-6807312");
string data = "field-keywords=ASP.NET 2.0";
        if (uri.Scheme == Uri.UriSchemeHttp)
        {

            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
            request.Method = WebRequestMethods.Http.Post;
            request.ContentLength = data.Length;
            request.ContentType = "application/x-www-form-urlencoded";
            StreamWriter writer = new StreamWriter(request.GetRequestStream());
            writer.Write(data);
            writer.Close();
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            StreamReader reader = new StreamReader(response.GetResponseStream());
            string tmp = reader.ReadToEnd();
            response.Close();
            //return response.ResponseUri.AbsoluteUri;
            return tmp;

        }

        return null;
}

Возвращаемое значение - tmp - это строка HTML, которую я хочу отобразить в Iframe. Я могу сделать это, добавив элемент управления Literal в iframe и установив для свойства text значение, возвращаемое вышеуказанной функцией

<iframe  id="myIFrame" runat="server"  height="700" width="950"  frameborder="0" />
    <asp:Literal ID="litFrame" runat="server" Mode="PassThrough" />

 </iframe>

 litFrame.Text = SAML.PostDataToServerAndGetResponse();

Приведенный выше код прекрасно отображает страницу, но когда я нажимаю на любую из ссылок, открывается новая страница.
Явного сценария, вызывающего сброс фрейма, не существует, потому что если я установлю атрибут src в iframe на response.ResponseUri.AbsoluteUri, все клики и обновления страницы останутся в фрейме.

Чего я хочу достичь

Отображение результата публикации в Iframe и всех пользователей для выполнения любых кликов. Условие: щелчки во фрейме должны обновить фрейм, а не переходить на новую страницу.

1 Ответ

1 голос
/ 23 сентября 2011

Ифреймы не работают так, как вы думаете.Содержимое внутри тега <iframe> предназначено для отображения только в том случае, если тег не поддерживается браузером, а не в качестве содержимого по умолчанию в iframe.Я удивлен, что вы вообще видите какой-либо контент вашего литерала на странице - есть ли на самом деле вывод <iframe> в вашем html-источнике, или ASP.NET стал «умным» и вывел что-то другое?

На самом деле, вы можете выбрать следующие варианты:

  • Установить URL-адрес iframe для страницы / обработчика / и т. Д., Которая будет генерировать содержимое, которое вы хотите внутри iframe (т. Е. Эта страница вызывает ваш метод PostDataToServerAndGetResponse)
  • Использование javascript для записи содержимого в iframe
  • Вы можете установить целевое значение <form> для iframe и опубликовать данные для него

IЯ бы сказал, что вариант 1 будет самым простым и чистым.

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