#c# #asp.net #page-refresh
#c# #asp.net #страница-обновить
Вопрос:
У меня есть ASP.NET веб-сайт и отдельное приложение на C #. Приложение записывает данные в файл, веб-сайт заполняет древовидное представление данными из файла. Я заполняю представление дерева в событии загрузки страницы.
Веб-сайт проверяет, изменился ли файл. Это происходит из файла, находящегося за кодом. Если файл действительно изменился, веб-сайт необходимо обновить. Я не могу использовать Response.Redirect
, потому что я получаю
Ответ недоступен в этом контексте
Я пытался System.Web.HttpContext.Current.Response.Redirect
, но это дает мне нулевую ссылку.
Как я могу обновить страницу из файла с кодом, чтобы она загружала правильные данные в древовидном представлении? Приветствуются другие предложения, которые работают, но используют что-то другое, кроме обновления страницы. Заранее спасибо!
Редактировать: фактическая проблема заключается в динамическом обновлении treeview (новые данные = обновленный treeview). Я пытался что-то сделать с данными из базы данных MySQL, но не удалось. Идея та же, за исключением того, что данные поступают не из файла, а из базы данных. Я добавил это, потому что подумал, что эта информация может помочь пользователям понять мою проблему.
Комментарии:
1. Вы пытаетесь выполнить перенаправление из своего приложения на C #?
2. Нет, из файла, находящегося за кодом, из asp.net страница.
3. Каков контекст? Где, в рамках жизненного цикла страницы, это делается попытка?
4. И ответ недоступен? Это странно. Где конкретно в вашем коде вы это вызываете?
5. В событии загрузки страницы я использую FileSystemWatcher, чтобы проверить, был ли изменен файл. В измененном событии я пытаюсь его обновить. Я отредактировал свой пост, добавив дополнительную информацию о проблеме.
Ответ №1:
вы не можете отправлять данные клиенту по инициативе сервера.
Вам нужно будет провести опрос (jQuery / ajax), если доступны новые данные, а затем обновить со стороны клиента.
это включает в себя в основном :
- на сервере
- веб-сервис, метод страницы webmethod, пользовательский обработчик и т. Д., Который может определить, доступны ли новые данные
- на клиенте
- таймер, который запрашивает сервер, обновляются ли данные, и, в этом случае, обновляет страницу или восстанавливает DOM при использовании некоторых шаблонов JS
[Править] немного предыстории :
На самом деле, System.Web.HttpContext.Current.Response
равно null из-за асинхронной модели протокола Http. Браузер отправляет запрос «http://srv/resource «, сервер перехватит его на порту 80 (по умолчанию), проанализирует запрос, создаст ответ (в основном кучу HTML-контента) и отправит ответ браузеру. Затем соединение закрывается. Этот выбор обеспечивает отличную масштабируемость, поскольку не требует поддержания тысяч подключений при почти полном отсутствии данных, передаваемых по нему.
Следствием этого является то, что веб-сервер должен знать о клиенте, кроме того, что отправляется в запросе. Сервер получает текст и отправляет текст в ответ.
Корпорация Майкрософт создала ASP.Net фреймворк для воспроизведения ощущения RAD от настольных приложений. Вы думаете об элементах управления и событиях, а не о создании потока html, такого как ASP или PHP. Они преуспели в том смысле, что создание веб-приложений очень похоже на разработку настольных компьютеров.
На самом деле это то, что вызывает у вас некоторое замешательство. Даже если asp.net фреймворк инкапсулирует большую часть сантехники (viewstate является ключевым) для имитации этого поведения, asp.net будет, по крайней мере, по-прежнему работать анализатор текста запроса, который создает HTML-текст для отправки клиенту одним выстрелом.
Так что вам придется обманывать. Вы можете, как я и предлагал, автоматизировать браузер (используя javascript), чтобы обернуть эту асинхронную работу в «динамическое» приложение.
Комментарии:
1. Что вы подразумеваете под клиентской стороной? Веб-страница (Default.aspx) вместо файла с кодом (Default.aspx.cs)? Я вызываю функцию перенаправления из asp.net приложение, а не мое серверное приложение. Кстати, я добавил некоторую дополнительную информацию о проблеме в своем сообщении.
2. Он имеет в виду клиентскую сторону. По умолчанию.aspx = НА СТОРОНЕ СЕРВЕРА. Сгенерированный HTML-код отправляется браузеру = клиенту. Итак, вам нужно ввести код (Javascript) в html-страницу, которая регулярно опрашивает.
3. Я думаю, что Web Forms — это прекрасный веб-фреймворк, но это абсолютно катастрофический способ узнать о Сети. @Carlito пожалуйста, узнайте, как работает веб.
4. @stilgar: это стратегия MS way, дающая возможность большинству разработчиков быстро создавать приложения. Позвольте опытным разработчикам взломать метод внутренней визуализации элементов управления: p ….. или подождите несколько лет для выпуска asp.net mvc (гораздо более мощный, но требует более широкого спектра навыков)
5. вы правы … есть место для обоих фреймворков, с плюсами и минусами для каждой стороны.
Ответ №2:
Вы не можете успешно использовать FileSystemWatcher изнутри веб-страницы.
Экземпляр страницы живет достаточно долго, чтобы обработать один запрос. И после того, как этот запрос был обработан, вы не можете выполнить перенаправление. Браузер больше не будет прослушивать.
Вам нужно выполнить опрос со своей веб-страницы, используя дату, когда вы в последний раз читали этот файл. Если дата последнего изменения этого файла изменилась по сравнению с тем, что вы помните, вам нужно будет обновить страницу.