如何将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 [重复]