javascript 如何在c#后面的代码中获取javascript值

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/17700410/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-27 09:16:04  来源:igfitidea点击:

How to get javascript values on code behind in c#

c#javascriptjqueryasp.netajax

提问by sikha

I need to get javascript values on code behind in c#.I know i can use hidden field but there is no server control on page for postback.Please tell me how can get vales in code behind.

我需要在 c# 中的代码后面获取 javascript 值。我知道我可以使用隐藏字段,但页面上没有用于回发的服务器控件。请告诉我如何在代码后面获取值。

Here is my code:

这是我的代码:

<html>
<head>
<title>Facebook Get Logged in User Details UserName,Email,Profile Image</title>
    <script src="jquery-1.6.2.min.js" type="text/javascript"></script>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<script>
    // Load the SDK Asynchronously



    (function (d) {
        var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
        if (d.getElementById(id)) { return; }
        js = d.createElement('script'); js.id = id; js.async = true;
        js.src = "//connect.facebook.net/en_US/all.js";
        ref.parentNode.insertBefore(js, ref);
    } (document));

    // Init the SDK upon load
    window.fbAsyncInit = function () {
        FB.init({
            appId: 'APPID', // App ID
            channelUrl: '//' + window.location.hostname + '/channel', // Path to your Channel File
            status: true, // check login status
            cookie: true, // enable cookies to allow the server to access the session
            xfbml: true  // parse XFBML
        });

        // listen for and handle auth.statusChange events
        FB.Event.subscribe('auth.statusChange', function (response) {
            if (response.authResponse) {
                // user has auth'd your app and is logged into Facebook
                var uid = "http://graph.facebook.com/" + response.authResponse.userID + "/picture";
                FB.api('/me', function (me) {
                    document.getElementById('auth-displayname').innerHTML = me.name;
                    document.getElementById('myJSString').value = me.name;

                    alert(document.getElementById('myJSString').value);

                    document.getElementById('Email').innerHTML = me.email;
                    document.getElementById('profileImg').src = uid;

                    //  document.getElementById('ctl00_CPHDefault_tcTPS_TPProd_ctl01_tcProduction_TPNewT??itlesStatus_ChangedRowsIndicesHiddenField').value = uid;
                   // alert('yyy');

                })
                document.getElementById('auth-loggedout').style.display = 'none';
                document.getElementById('auth-loggedin').style.display = 'block';
            } else {
                // user has not auth'd your app, or is not logged into Facebook
                document.getElementById('auth-loggedout').style.display = 'block';
                document.getElementById('auth-loggedin').style.display = 'none';
            }
        });
        $("#auth-logoutlink").click(function () { FB.logout(function () { window.location.reload(); }); });
    }





</script>
<h1>
Facebook Login Authentication Example</h1>
<div id="auth-status">
<div id="auth-loggedout">
<div id="Result"  class="fb-login-button" autologoutlink="true" scope="email,user_checkins">Login</div>
</div>
<div id="auth-loggedin" style="display: none">
Name: <b><span id="auth-displayname"></span></b>(<a href="#" id="auth-logoutlink">logout</a>)<br />
Email: <b><span id="Email"></span></b><br />
Profile Image: <img id="profileImg" />

<form runat="server">
<asp:HiddenField runat="server" id="myJSString" />

</form>
</div>
</div>
</body>
</html>

You can see there is no server control so how i can get NAME,UID variables in code behind.

您可以看到没有服务器控件,所以我如何在后面的代码中获取 NAME、UID 变量。

Thanks

谢谢

采纳答案by Karl Anderson

I would investigate the use of ASP.NET AJAX Page Methods, because they allow for script callable stand-alone web services that live in an .aspxpage, like this:

我将调查 ASP.NET AJAX 页面方法的使用,因为它们允许存在于页面中的脚本可调用独立 Web 服务.aspx,如下所示:

Page Method in your code-behind file (call it default.aspx for discussion's sake):

代码隐藏文件中的页面方法(为了讨论起见,将其称为 default.aspx):

[WebMethod]
public static string SaveData(string name, string uid)
{
    // Logic here to do what you want with name and uid values (i.e. save to database, call another service, etc.)
}

jQuery call to default.aspx's SaveData method:

jQuery 调用 default.aspx 的 SaveData 方法:

$.ajax({
    type: "POST",
    url: "default.aspx/SaveData",
    data: "{'name':'John', 'uid':'ABC123'}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg) {
        // Do something interesting here.
    }
});

Notes: ASP.NET AJAX Page Methods automatically encode their response to JSONso you will not see any JSONserialization in the code-behind or any serialization logic at all.

注意:ASP.NET AJAX 页面方法会自动对其响应进行编码,JSON因此您根本看不到JSON代码隐藏中的任何序列化或任何序列化逻辑。

For more information about ASP.NET AJAX Page Methods check out Using jQuery to directly call ASP.NET AJAX page methods

有关 ASP.NET AJAX 页面方法的更多信息,请查看Using jQuery to direct call ASP.NET AJAX 页面方法

回答by Adil

You can use a hiddenfield server control assign the values you need to it in javascript and assess it on server side. If you do not want post back then you can use jQuery ajaxto send values.

您可以使用 hiddenfield 服务器控件在 javascript 中为它分配所需的值,并在服务器端对其进行评估。如果您不想回发,则可以使用jQuery ajax发送值。

Html

html

<asp:hiddenfield id="ValueHiddenField" runat="server"/>

Javascript

Javascript

document.getElementById('ValueHiddenField').value = "yourValue";

Code behind

背后的代码

string yourValue = ValueHiddenField.Value;

Using jQuery ajax and web methodto send values to code behind, you can find nice tutorial over here.

使用jQuery ajax 和 web 方法将值发送到后面的代码,你可以在这里找到很好的教程。

$.ajax({
  type: "POST",
  url: "PageName.aspx/MethodName",
  data: {'yourParam': '123'},
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: function(msg) {
    // Do something interesting here.
  }
});

Code behind

背后的代码

[WebMethod]
public static void YourMethod(string yourParam)
{
   //your code goes here
}

回答by C Sharper

You can use following method:

您可以使用以下方法:

<script language="javascript" type="text/javascript">
    function returnString() {
        var val = 'sampleValue';
        return val;
    }
</script>

C# Code to get the return value of the above function:

获取上述函数返回值的C#代码:

ClientScript.RegisterClientScriptBlock(this.GetType(), "alertScript", "<script language="javascript">var a=returnString();alert(a);</script>");

Or simply as Adil said, can use hidden field and assign value:

或者就像 Adil 所说的那样,可以使用隐藏字段并赋值:

<asp:HiddenField ID="hField" Value="0" runat="server" />
        <asp:Button ID="Button1" runat="server"  OnClientClick="returnString();"
            Text="Button" onclick="Button1_Click" />

script for assigning value:

赋值脚本:

<script language="javascript" type="text/javascript">
       function returnString() {
           debugger;
           document.getElementById("hField").value = "sampleValue";
       }
   </script>