C# 在代码隐藏中执行JavaScript函数--如何在代码隐藏中获取返回值

C# 在代码隐藏中执行JavaScript函数--如何在代码隐藏中获取返回值,c#,javascript,jquery,asp.net,C#,Javascript,Jquery,Asp.net,我有以下JavaScript函数,它调用jQueryJSON函数并获取关于时区的日期时间。这个很好用 <script type="text/javascript"> function JSFunctionName() { $(document).ready(function () { var timezone = "US/Central"; $.getJSON("http://json-time.appspo

我有以下JavaScript函数,它调用jQueryJSON函数并获取关于时区的日期时间。这个很好用

  <script type="text/javascript">
    function JSFunctionName() {
        $(document).ready(function () {
            var timezone = "US/Central";
            $.getJSON("http://json-time.appspot.com/time.json?tz=" + timezone + "&callback=?",
function (data) {
    if (data.hour < 12) {
        //alert(data.hour + ':' + data.minute); // want to return this value data.hour + data.minute
        //document.getElementById('<%=HiddenField1.ClientID %>').value = data.hour + ':' + data.minute;// this does not work
    }
})
        });
    }
</script>
调用
Page.ClientScript.RegisterStartupScript

请注意,我试图在HiddenField中设置值,但它不起作用。你可以在评论中看到

如有任何想法或替代方案,将不胜感激


谢谢

如果不发回服务器,您将无法执行此操作。原因是javascript在客户机上执行,并且只有在页面离开服务器后才会执行

我假设这是一个人为的例子,但是在这个特定的例子中,如果您想在客户端和服务器上获得相同的信息,您需要在服务器上计算它,并将其传递给客户端


如果这是不可能的,您将需要创建一个Web服务,但必须异步处理响应。

如果不回发到服务器,您就不能这样做。原因是javascript在客户机上执行,并且只有在页面离开服务器后才会执行

我假设这是一个人为的例子,但是在这个特定的例子中,如果您想在客户端和服务器上获得相同的信息,您需要在服务器上计算它,并将其传递给客户端


如果这是不可能的,您将需要创建一个Web服务,但必须异步处理响应。

您可以使用javascript函数对服务器的ajax调用,或者在表单上放置另一个按钮,在JSFunctionName函数的隐藏字段中设置计算值后,使用style和cause将其隐藏并单击此按钮。

您可以从javascript函数使用ajax调用服务器,也可以在表单上放置另一个按钮,在JSFunctionName函数的隐藏字段中设置计算值后,使用样式隐藏它并导致单击此按钮。

您的问题在于以下行:

Page.ClientScript.RegisterStartupScript(this.GetType(),
    "alert", "JSFunctionName();", true);
实际上并不“执行”Javascript函数。它只是增加了

JSFunctionName();
到脚本块中的页面,在代码完成并加载页面后执行

您可以将按钮的“OnClientClick”属性设置为“JSFunctionName()”,而不是从按钮单击事件中“调用Javascript”:


这将导致JSFunctionName在回发之前触发。然后,您可以设置JSFunctionName()方法,使其在完成后返回true,这将触发回发


然后,您将能够从服务器端单击处理程序访问HiddenField1的值。

您的问题在于以下行:

Page.ClientScript.RegisterStartupScript(this.GetType(),
    "alert", "JSFunctionName();", true);
实际上并不“执行”Javascript函数。它只是增加了

JSFunctionName();
到脚本块中的页面,在代码完成并加载页面后执行

您可以将按钮的“OnClientClick”属性设置为“JSFunctionName()”,而不是从按钮单击事件中“调用Javascript”:


这将导致JSFunctionName在回发之前触发。然后,您可以设置JSFunctionName()方法,使其在完成后返回true,这将触发回发


然后,您将能够从服务器端单击处理程序访问HiddenField1的值。

是否使用updatepanels?在这种情况下,$(document).ready事件可能不会在按钮单击事件后触发。不,我没有使用updatepanel。您使用的是updatepanel吗?在这种情况下,$(document).ready事件可能不会在按钮单击事件后触发。不,我没有使用updatepanel。我知道我可以在客户端单击=“JSFunctionName();”时触发,但我不想这样做,这是我的要求。有什么特别的原因让你不想这样做吗?因为我必须执行服务器端代码,从数据库中获取时区,然后将该时区传递给JS函数。我知道我可以在clientclick=“JSFunctionName();”,但我不想这样做,这是我的要求。有什么特别的原因你不想这样做吗?因为我必须执行服务器端代码,从数据库中获取时区,然后将该时区传递给JS函数。谢谢你的回答,但是有什么方法可以做到这一点吗?在调用Jquery JSON函数后,我必须在服务器端获取值。在
按钮1\u单击
处理程序中使用对该Web服务的同步调用。你不能在服务器上使用JQuery。你能告诉我怎么做吗?
new WebClient()。DownloadString(“此处的url”)
会给你web服务调用的结果。谢谢你的回答,但有什么方法可以做到这一点吗?在调用Jquery JSON函数后,我必须在服务器端获取值。在
按钮1\u单击
处理程序中使用对该Web服务的同步调用。你不能在服务器上使用JQuery。你能告诉我怎么做吗?
new WebClient()。DownloadString(“此处的url”)
将为你提供web服务调用的结果。
<asp:Button ID="Button1" runat="server" Text="Button" 
    onclick="Button1_Click" OnClientClick="JSFunctionName();" />