为在页面加载时从javascript函数获取的文本框赋值

时间:2011-10-05 01:38:07

标签: javascript asp.net visual-studio c#-4.0

快速背景:我是编程新手,已经使用VisualStudio,ASP.NET和C#几个月了。我没有使用JavaScript的经验。我正在尝试将时间从UTC转换为浏览器查看页面的本地时间。经过研究后,我认为我需要做的各种事情的最佳选择是在页面加载时检测UTC的本地偏移量,然后保存该信息以用于本地转换和回发到服务器。

我在我的" Source"中编写了以下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:名称&#39; calculateOffset&#39;在当前上下文中不存在

这是在从母版页继承的子页面中,我尝试将JS放在头部和正文内容中,我还创建了一个.js文件,但还没有想出如何调用它。主要是我正在寻找一种方法来将JS函数的偏移量输出到文本框中,但如果您有任何其他建议我欢迎他们。提前谢谢!

修改 我创建了一个测试asp.net Web表单来尝试下面的建议,以简化这里的所有代码:

<%@ 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 个答案:

答案 0 :(得分:1)

<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>

答案 1 :(得分:1)

以下内容对我有用。

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

只需将此行粘贴在Page_Load事件上即可。

也可以直接将“offset”的值分配给文本框,而不是“返回偏移量”:

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

希望这有帮助。