如何将javascript变量传递给服务器端方法

Posted

技术标签:

【中文标题】如何将javascript变量传递给服务器端方法【英文标题】:How to pass a javascript variable to server side method 【发布时间】:2015-01-15 07:48:09 【问题描述】:

我面临的问题是我无法将 javascript 变量传递到服务器端标签在服务器端,但不幸的是我得到了隐藏字段的空值。帮我解决这个问题

代码

$(document).ready(function()
  var DataID = "4325";
    testDataVal(DataID);
);

function testDataVal(DataID)

<%=RenderMethod(DataID) %>  // How to pass javascript variable to server side



隐场方法:

$(document).ready(function()
     var DataID = "4325";
    testDataVal(DataID);
);

function testDataVal(DataID)
   $("#<%=hdnDataVal.ClientID %>").val(DataID);

  alert($("#<%=hdnDataVal.ClientID %>").val(DataID));    // Here using javascript I can able to set the value and when I alert the value it is displayed

  <%=RenderMethod(hdnDataVal.Value) %>  // here the hiddenfield value is empty



    <asp:HiddenField runat="server" ID="hdnDataVal"  />

【问题讨论】:

您需要将变量放入表单并提交,或者使用 AJAX 请求。您不能将 JS 变量应用于 C# 代码,因为一个是客户端,另一个是服务器端。 @RoryMcCrossan 但如果我使用 hiddenfield 也不起作用 你在哪里设置DataID的值? 其实 Render 方法来自另一个库,它不是直接方法 您获得了值,但在服务器端生成页面时它是空的。当页面生成并发送到客户端时, 已经输出了一个值为空的 hdnDataVal.Value。 【参考方案1】:

首先...您不应该按照自己的方式混合服务器代码和客户端代码。

这是一种糟糕的代码设计方式。始终尝试将客户端和服务器代码分开。它们在不同的时刻、地点和不同的环境下执行……将它们放在一起最终会使您陷入难以调试的错误。

我敢打赌,您在这里遇到的问题是由于这种编码方式造成的。

你在你的代码sn-p上说

<%=RenderMethod(hdnDataVal.Value) %>  // here the hiddenfield value is empty

当您的页面正在加载并执行服务器代码时,$(document).ready() 中的代码尚未触发,因为它会在您的整个页面完成加载时触发。因此,您的 RenderMethod 会在 您将任何值放入变量之前触发。

【讨论】:

【参考方案2】:

尝试使用 $.ajax();

var url = 'my-url.aspx';
$.ajax(
    url: url,
    type: 'POST',
    data: 'variable_name': my_variable ,
    success: function(html)
     
      alert('ok');
    ,

);

和服务器端的接收者:

string my_variable = Request.Form['variable_name'];

【讨论】:

【参考方案3】:

您可以使用Page Method 从客户端进行服务器端调用。这可能是实现您想要的最简单的方法。

首先,您需要在启用Page Methods 的aspx 页面中包含脚本管理器:

<asp:ScriptManager ID="scrmgr" EnablePageMethods="true" runat="server" /> 

现在您可以调用服务器端方法并将您想要的客户端数据传递给它,就像这样:

<script type="text/javascript">
    $(document).ready(function()
        var DataID = "4325";
        testDataVal(DataID);
    );

    function testDataVal(DataID) 
        PageMethods.RenderMethod(DataID, OnSuccess, OnError);
    

    function OnSuccess(result) 
        alert(result);
    

    function OnError() 
        alert('Some error has ocurred!');
    
    </script>

OnSuccess 函数在成功调用服务器端方法的情况下被调用。否则会调用OnError 函数。

这就是应该在 .aspx.cs 文件中声明 Page Method 的方式:

[System.Web.Services.WebMethod]
public static string RenderMethod(string dataID)

    return "Got here!";

如果您在RenderMethod 中放置一个断点,那么您可以验证客户端数据(即值“4325”)是否正确传递给它。

【讨论】:

以上是关于如何将javascript变量传递给服务器端方法的主要内容,如果未能解决你的问题,请参考以下文章

通过 ajax 将 Javascript 变量传递给 PHP

nodeJS + Swig模板将变量传递给javascript

如何使用 POST 方法将 javascript/jQuery 变量传递给 PHP [重复]

如何从 Javascript 提示框中获取值并将其传递给 PHP 变量以便能够保存在 SQL 中?

将 JavaScript 值传递给 PHP 变量(有限制)

如何按值将变量传递给匿名javascript函数?