Обновить страницу asp.net из файла с выделенным кодом - PullRequest
1 голос
/ 12 октября 2011

У меня есть веб-сайт ASP.NET и отдельное приложение на C #.Приложение записывает данные в файл, веб-сайт заполняет древовидное представление данными в файле.Я заполняю древовидное представление на странице Событие загрузки.

Сайт проверяет, не изменился ли файл.Это происходит из кода за файлом.Если файл изменился, веб-сайт необходимо обновить.Я не могу использовать Response.Redirect, потому что я получаю

Ответ недоступен в этом контексте

Я пытался System.Web.HttpContext.Current.Response.Redirect, но это дает мне NullReference.

Как я могу обновить страницу из файла с кодом, чтобы она загружала нужные данные в виде дерева?Другие предложения, которые работают, но используют что-то еще, кроме обновления страницы, приветствуются.Заранее спасибо!

Редактировать: Актуальной проблемой является динамическое обновление древовидного представления (новые данные = обновленное древовидное представление).Я пытался что-то сделать с данными из базы данных MySql, но не получилось.Идея та же, за исключением того, что данные поступают не из файла, а из базы данных.Я добавил это, потому что думал, что эта информация может помочь пользователям понять мою проблему.

Ответы [ 2 ]

2 голосов
/ 12 октября 2011

вы не можете отправить данные клиенту по инициативе сервера.

Вам придется опросить (jQuery / ajax), если новые данные доступны, а затем обновить со стороны клиента.

это включает в основном:

  • на сервере
    • веб-сервис, метод страницы веб-метода, пользовательский обработчик и т. Д., Которые могут определить наличие новых данных
  • на клиенте
    • таймер, который запрашивает сервер, обновляются ли данные, и, в этом случае, обновляет страницу или восстанавливает DOM при использовании некоторого JS-шаблона

[Изменить] немного фона:

На самом деле, System.Web.HttpContext.Current.Response является нулевым из-за асинхронной модели протокола Http. Браузер отправляет запрос "http://srv/resource",, сервер перехватывает его на порту 80 (по умолчанию), анализирует запрос, создает ответ (в основном это связка HTML-контента) и отправляет ответ браузеру. Затем соединение закрывается. Это Выбор обеспечивает большую масштабируемость, поскольку не требует поддержания тысяч соединений в живых, при этом данные практически не передаются.

Результатом этого является то, что веб-сервер должен знать клиента, кроме того, что отправляется в запросе. Сервер получает текст и отправляет текст взамен.

Microsoft создала среду ASP.Net для воспроизведения ощущений RAD в настольных приложениях. Вы думаете с элементами управления и событиями, а не с созданием потока HTML, как ASP или PHP Они преуспели в том смысле, что создание веб-приложений весьма похоже на разработку настольных систем.

вполне на самом деле вызывает у вас некоторую путаницу. Даже если инфраструктура asp.net инкапсулирует большую часть сантехники (viewstate является ключом) для имитации этого поведения, asp.net, по крайней мере, все равно будет анализатором текста запроса, который создает HTML-текст для отправки клиенту один выстрел.

Так что вы должны обманывать. Как я уже говорил, вы можете автоматизировать браузер (используя javascript), чтобы превратить эту асинхронную работу в «динамическое» приложение.

0 голосов
/ 12 октября 2011

Вы не можете успешно использовать FileSystemWatcher из веб-страницы.

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

Вам необходимо выполнить опрос со своей веб-страницы, используя дату последнего прочтения этого файла. Если дата последнего изменения этого файла изменилась по сравнению с тем, что вы помните, вам нужно обновить страницу.

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