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

How to pass a javascript variable to server side method

本文关键字:服务器端 方法 变量 javascript      更新时间:2023-09-26

我遇到了无法将javascript变量传递给服务器端的问题,我知道在这种情况下这是无法实现的,所以我尝试使用jQuery将值设置为asp隐藏字段并在服务器端获取标签的值,但不幸的是,我得到了隐藏字段的空值。帮助我如何解决此问题

法典

$(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"  />

首先...不应以当前的方式混合使用服务器代码和客户端代码。

这是设计代码的糟糕方法。尝试始终将客户端和服务器代码分开。它们在不同的时刻、地点和不同的情况下执行......将它们放在一起最终会吸引您遇到难以调试的错误。

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

你在代码片段上说

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

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

尝试使用 $.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'];
您可以使用

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")是否正确传递给它。