[英]Passing javascript variables to server-side C# logic
有没有办法在C#中将javascript变量分配/传递/复制到服务器端变量? 为了便于讨论,假设我能够解析一些JSON,以获取要存储的变量并在客户端上分配它们(即var = FirstName和var = 25以及var = someDateTime等)。
客户端上存在Javascript变量,因此为了将这些值输入服务器,您需要执行来自客户端的请求。 您可能需要一种称为AJAX的方法。 AJAX涉及Javascript在页面后台向服务器发出请求。 您将建立一个C#网页,期望这些后台请求。 如果您使用GET请求,则将变量放在AJAX请求的查询字符串中,以放入新的C#页面。 如果要使用POST请求,则将在发布到页面的数据中设置参数。
jQuery之类的库使这种事情变得非常简单。
没有直接方法可以从服务器端代码访问客户端代码中的变量。
一种无需编写处理程序,ajax帖子等的简单方法即可完成此操作,只需将java脚本变量存储在一个隐藏的文本框中,然后在您的帖子中检索它即可。 您还可以写回隐藏字段,并使用以下值来输入脚本:
标记
<asp:HiddenField runat="server" Id="JavascriptValue" value="0">
脚本
<script>
var myValue = <%=JavascriptValue.Value%>
</script>
服务器端
protected void Page_Load(object sender, EventArgs e)
{
string val = JavascriptValue.Value;
}
我所做的是将javaScript变量保存在cookie中,然后从C#中读取它。
JavaScript代码:
<script>
$(document).ready(function () {
createCookie("height", $(window).height(), "10");
});
function createCookie(name, value, days) {
var expires;
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
expires = "; expires=" + date.toGMTString();
} else {
expires = "";
}
document.cookie = escape(name) + "=" + escape(value) + expires + "; path=/";
}
</script>
C#代码:
height of browser:@Request.Cookies["height"].Value;
通过JS将值写入控件(例如HiddenField
)并在回发中读取。
您可以在Page_Load
代码隐藏中注册隐藏字段
if (this.Request.Form["myHiddenField"] == null) {
ClientScript.RegisterHiddenField("myHiddenField", ""); }
用脚本填充它
ClientScript.RegisterOnSubmitStatement(this.GetType(),
MethodBase.GetCurrentMethod().DeclaringType.Name + "_myHiddenField",
"var res=document.getElementById('myHiddenField');if(res!=null){res.value='some value';}");
并在回发中阅读(也为Page_Load
)
var myValue = (!IsPostBack)
? null
: this.Request.Form["myHiddenField"];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.