将变量从代码隐藏传递给javascript方法
我正在从.cs文件调用一个javascript函数,如下所示:将变量从代码隐藏传递给javascript方法,javascript,asp.net,Javascript,Asp.net,我正在从.cs文件调用一个javascript函数,如下所示: private string CallValuesScript() { StringBuilder sb = new StringBuilder(); sb.AppendLine("$(document).ready(function() {"); sb.AppendLine("DisplayValues();"); sb.AppendLine(" });"); return sb.
private string CallValuesScript()
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("$(document).ready(function() {");
sb.AppendLine("DisplayValues();");
sb.AppendLine(" });");
return sb.ToString();
}
function DisplayRatings(id, count) {
//code
}
我在类级别声明了两个整数
私有整数分级LinkId=0;
私有整数评级值=0
请告诉我如何将这两个整数值传递给函数“DisplayValues();”
我的javascript函数是aspx,如下所示:
private string CallValuesScript()
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("$(document).ready(function() {");
sb.AppendLine("DisplayValues();");
sb.AppendLine(" });");
return sb.ToString();
}
function DisplayRatings(id, count) {
//code
}
谢谢您可以通过将服务器端变量附加到脚本帮助程序中的方法调用,将其传递给客户端
sb.AppendLine("DisplayValues(" + ratingLinkId.ToString() + ", " + ratingValue.ToString() + ");")
一种方法是在aspx中包含值的隐藏字段。只有在页面加载后变量不会改变的情况下,这才可以工作 您可以做的另一件事是使用WebMethod/ScriptMethod属性的page方法,并将其作为来自javascript的web服务调用调用调用 另一种方法是在构建可以使用的javascript字符串时将变量传递到javascript函数中
sb.AppendLine("DisplayValues(" + ratingLinkId + "," + ratingValue + ");");
@桑,我同意幽灵的说法。在初始化代码的某个地方,(aspx页面标记、页面加载等)创建隐藏字段,并将其值设置为所需的整数。这样做之后,您将不再需要创建带有代码隐藏的js 这是一个非常简单的例子,我用文字设置了hiddenfields。您可以同样轻松地将这些值保持为未设置状态,并在.cs页面的一些初始化代码中设置它们 将这些行添加到.aspx页面
现在将js代码更改为以下内容。假设您使用的是较新版本的asp.net,Microsoft有一些特殊的js函数$get,$find可以将asp.net id转换为clientid
$(document).ready(function() {
var arg1 = $get('<% hdnfldarg1 %>');
var arg2 = $get('<% hdnfldarg2 %>');
DisplayValues(arg1,arg2);")
});"
$(文档).ready(函数(){
变量arg1=$get(“”);
变量arg2=$get(“”);
显示值(arg1,arg2);“”)
});"
当然,这是未经测试的代码。您可以添加任何页面加载/init代码来设置两个隐藏字段的精确值。如果您试图使用一个单独的js文件,我不确定这是否会起作用,因为您希望避免在codebehind中生成JavaScript。我个人也不喜欢javascript中嵌入的代码块。此外,在HTML中使用隐藏字段意味着这些值最终会在表单提交时提交 我的解决方案是在codebehind中创建一个私有内部类,其中包含JavaScript中需要的所有值的属性:
class JSValues {
public int id { get; set; }
public int count { get; set; }
}
在codebehind中,将其序列化为JSON:
string json = new JavaScriptSerializer().Serialize(new JSValues() {
id = 0,
count = 0 // or whatever you want to assign them
});
ClientScript.RegisterClientScript(
this.GetType(),
"codeBehindToJS",
"var fromCodeBehind = " + json + ";");
最后,在javascript中,可以访问以下值:
DisplayValues(fromCodeBehind.id, fromCodeBehind.count);
编辑:一些更正,即使聚会有点晚。使用$get的解决方案对我不起作用 但这里有一个简单的方法,不用使用隐藏字段 在代码隐藏中定义变量:
Protected maxPhotos As String
然后在javascript内的aspx页面上,简单地像这样抓取它:
var maxPhotos = 0 + "<%=maxPhotos%>";
var maxPhotos=0+“”;
我之所以选择“0+”,是因为我想强制从字符串到数字的转换。在跳转到“捷径”dot.net提供之前,你应该学习正确的web开发。我认为更好的评论是,你能解释一下为什么你选择这样做,而不是仅仅把它放在aspx页面上吗?