присваивать значение текстовому полю, полученному из функции JavaScript при загрузке страницы - PullRequest
3 голосов
/ 05 октября 2011

Краткая справка: я новичок в программировании и использую VisualStudio, ASP.NET и C # в течение пары месяцев.У меня нет опыта работы с JavaScript.Я пытаюсь перевести время из UTC в местное время браузера, просматривающего страницу.После исследования я считаю, что мой лучший вариант для различных вещей, которые мне нужно сделать, это определить локальное смещение от UTC при загрузке страницы, а затем сохранить эту информацию, чтобы использовать ее для локального преобразования и обратной передачи на сервер.

Я написал следующую функцию js на своей странице «Источник»:

<script type="text/javascript" >
    function calculateOffset() {
        var rightNow = new Date();
        var UTCTime = rightNow.getUTCHours();
        var LocalTime = rightNow.getHours();
        var UTCDate = rightNow.getUTCDate();
        var LocalDate = rightNow.getDate();
        if (UTCDate == LocalDate) {
            var offset = LocalTime - UTCTime;
        }
        else {
            var offset = LocalTime - 24 - UTCTime;
        }
        return offset;
    }
</script>

Затем у меня есть элемент управления TextBox, который я хотел бы использовать для хранения возвращенного смещения:

<asp:TextBox ID="HiddenOffsetBox" runat="server" Visible="False" Text ="<%# calculateOffset() %>" ></asp:TextBox>

При отладке получено следующее сообщение об ошибке: Сообщение об ошибке компилятора: CS0103: имя «calcOffset» не существует в текущем контексте

Это дочерняя страница, наследуемая от главной страницы,Я попытался разместить JS как в заголовке, так и в теле, я также создал файл .js, но не понял, как его вызвать.Прежде всего я ищу способ получить смещение, выводимое функцией JS, в текстовое поле, но если у вас есть какие-либо другие предложения, я приветствую их.Спасибо заранее!

РЕДАКТИРОВАТЬ Я создал тестовую веб-форму asp.net, чтобы попробовать приведенное ниже предложение, чтобы упростить все, вот код:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TestForm.aspx.cs" Inherits="GTLWebApp.TestForm" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <script type="text/javascript" >

        $(document).ready(function () {
        // recommend using jQuery to make sure the page is loaded
        document.getElementById('<%= HiddenOffsetBox.ClientID%>').text =   calculateOffset();
        //or
        //jQuery way
        //$('#<%= HiddenOffsetBox.ClientID%>').val(calculateOffset());

        function calculateOffset() {
            var rightNow = new Date();
            var UTCTime = rightNow.getUTCHours();
            var LocalTime = rightNow.getHours();
            var UTCDate = rightNow.getUTCDate();
            var LocalDate = rightNow.getDate();
            if (UTCDate == LocalDate) {
                var offset = LocalTime - UTCTime;
            }
            else {
                var offset = LocalTime - 24 - UTCTime;
            }
            return offset;
        }
        </script>
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:TextBox ID="HiddenOffsetBox" runat="server" Visible="True" Text = ""></asp:TextBox>
        </div>
        </form>

    </body>
    </html>

Когда я запускаю это, я не получаю ошибок, но я не получаю смещение в текстовом поле, любая дополнительная помощь будет оценена ...

Ответы [ 2 ]

1 голос
/ 05 октября 2011

У меня работает следующее.

this.ClientScript.RegisterStartupScript(this.GetType(), "key", "<script type='text/javascript'> calculateOffset() </script>");

Просто вставьте эту строку в событие Page_Load.

Также вместо «return offset» вы можете напрямую назначить значение «offset» текстовому полю как:

document.getElementById("<%=HiddenOffsetBox.ClientID %>").value = offset;

Надеюсь, это поможет.

1 голос
/ 05 октября 2011
<script type="text/javascript" >
    //un-comment for jQuery
    //recommend using jQuery to make sure the page is loaded
    //$(document).ready(function() {            
       // $('#<%= HiddenOffsetBox.ClientID%>').val(calculateOffset());    
    //});

    document.getElementById('<%= HiddenOffsetBox.ClientID%>').value = calculateOffset();

    function calculateOffset() {
        var rightNow = new Date();
        var UTCTime = rightNow.getUTCHours();
        var LocalTime = rightNow.getHours();
        var UTCDate = rightNow.getUTCDate();
        var LocalDate = rightNow.getDate();
        if (UTCDate == LocalDate) {
            var offset = LocalTime - UTCTime;
        }
        else {
            var offset = LocalTime - 24 - UTCTime;
        }
        return offset;
    }
</script>

<asp:hidden ID="HiddenOffsetBox" runat="server" value="" ></asp:hidden>
...