将变量从代码隐藏传递给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.

我正在从.cs文件调用一个javascript函数,如下所示:

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页面上吗?