如何将 javascript 变量传递给服务器端方法
本文关键字:服务器端 方法 变量 javascript | 更新日期: 2023-09-27 18:30:58
我遇到了无法将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")是否正确传递给它。