Автоматическое обновление текста метки в ASP Masterpage без загрузки всей страницы

#javascript #asp.net #asp.net-ajax

#javascript #asp.net #asp.net-ajax

Вопрос:

У меня есть элемент управления label на главной странице ASP, текст которого будет загружен на Page_Load главной страницы.

Главная страница :

 <asp:label id="Label1"> </asp:label>
 

Файл Master.cs:

 Protected void Page_load()
{
   Label1.text = " Data Refreshed at :"   getUpdatedTimestamp();
}
 

Эта метка представляет обновленную временную метку при обновлении данных в базе данных. Мы обращаемся к базе данных с помощью функции getUpdatedTimestamp();

Итак, если использовать переход на другую страницу, то при повторной загрузке главной страницы мы сможем получить обновленную временную метку при попадании в базу данных в событии page_load главной страницы.

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

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

Не мог бы кто-нибудь, пожалуйста, предложить мне подходящий подход, чтобы сделать это.!!!

Я также попробовал функцию javascript setinterval(), чтобы сделать это, но застрял с вызовом функции на стороне сервера в функции javascript.

Комментарии:

1. покажите код, который вы пробовали с помощью javascript и ajax

Ответ №1:

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

Я предлагаю использовать javascript на стороне клиента, который будет вызывать веб-метод на стороне сервера с интервалом.

Создайте веб-метод на вашем ASPX.Страница CS:

     [System.Web.Services.WebMethod]
    public static string GetCurrentTime()
    {
        return DateTime.Now.ToString();
    }
 

В клиентском коде извлеките веб-метод сервера, используя вызов jQuery AJAX, и покажите ответ сервера в метке:

 <html>
    <head runat="server">
        <enter code here!-- jQuery required -->
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
        <script type="text/javascript">
            function ShowCurrentTime() {
                // Ajax call to YOUR_PAGE.aspx/GetCurrentTime
                $.ajax({
                    type: "POST",
                    url: "Default.aspx/GetCurrentTime", // Change Default.aspx to your ASPX page name, and GetCurrentTime to your server-side WebMethod name
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: OnSuccess // OnSuccess method is called when AJAX request receives the data from the server
                });
            }

            function OnSuccess(response) {
                // The response will contain JSON object like {"d":"29.6.2014 13:21:47"},
                // so the actual data is response.d
                $("#lblCurrentTime").text(response.d); // Fill our SPAN label with the data. 
            }

            $(function () {
                // Call every 1000 miliseconds
                window.setInterval(ShowCurrentTime, 1000);
            });
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
            <!-- LABEL TO SHOW CURRENT TIME -->
            <span id="lblCurrentTime"></span>
        </form>
    </body>
</html>
 

Вот и все. Таким образом, передача данных с сервера будет как можно меньше. Вызов серверного WebMethod не приведет к такому значительному снижению производительности сервера, как стандартные обратные отправки, поскольку WebMethod избегает стандартных событий жизненного цикла страницы.

Подробная информация:

http://www.aspsnippets.com/Articles/Call-ASPNet-Page-Method-using-jQuery-AJAX-Example.aspx

http://msdn.microsoft.com/en-us/library/byxd99hx (v= против 90).aspx

Комментарии:

1. Привет . . Большое спасибо за ваш подход, и я сделал то же самое. Но мой вопрос здесь был бы таким: «Можем ли мы вызвать метод на главной странице?»……. Я имею в виду url: «EMARMaster. Master / GetUpdatedTimestamp», может ли это быть так вместо aspx? Потому что, когда я вставил точку останова в файл master.cs в функцию, она не срабатывает для каждого временного интервала. Но если заменить весь метод простым оповещением («Hi») для каждого setinterval 10 секунд, это сработает. Надеюсь, вы получили именно то, что мне нужно ..!!!!! Заранее огромное спасибо.

2. AFAIK вы можете использовать веб-метод на главных страницах. Если вам нужно вызвать определенный веб-метод с нескольких веб-страниц, лучшим подходом является создание файла ASMX (веб-службы) вместо ASPX (например. MasterWebService.asmx) и скопируйте в него ту же функцию [WebMethod], которую я объяснил для ASPX. Затем в javascript вызовите ajax, используя url: «MasterWebService.asmx /GetUpdatedTimestamp». Для получения дополнительной информации, пожалуйста, прочитайте первые 3 главы в asp.net/web-forms/tutorials/aspnet-ajax / . … Файлы ASMX обеспечивают лучшую производительность для размещения веб-служб по сравнению с ASPX.

Ответ №2:

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

Комментарии:

1. Привет. . большое спасибо за ваш подход. . Но я не могу добавить диспетчер сценариев на главную страницу (из-за панели обновления), поскольку на всех моих дочерних страницах есть диспетчер сценариев.!!!