gpt4 book ai didi

asp.net - 将 asp.net 值传递给 javascript block

转载 作者:行者123 更新时间:2023-12-02 18:10:35 24 4
gpt4 key购买 nike

我需要将值从我的 asp.net 代码传递到页面中的 JavaScript 代码块。

我至少知道两种方法:

<script runat=server>
int a = 42;
protected override void OnInit(EventArgs e)
{
lbl.Text = "42";
}
</script>

<script>
var a = <%= a %>;
var b = <asp:Literal runat=server id=lbl>/>;
alert("the meaning of life=" + a + " or " + b);
</script>

但是,在 ASP.NET WebForms 中是否有更好的方法将 ASP.NET 代码中的变量值绑定(bind)到 JavaScript block ?这两个看起来都很困惑,因为它们不支持智能感知。

最佳答案

我最终做了一些我认为更稳健的事情。在母版页中我添加了以下内容:

public Dictionary<string, object> JavaScriptVars { get; set; }

然后我将此函数的结果附加到页面:

public string GetJavaScriptVars()
{
if (JavaScriptVars.Count == 0) return null;
StringBuilder sb = new StringBuilder();
sb.Append("<script>");
System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
int i = 0;
foreach (string s in JavaScriptVars.Keys)
{
if (i == 0)
sb.Append("var ");
sb.Append(s + "=");

object o = JavaScriptVars[s];
if (o is System.Collections.Specialized.NameValueCollection)
{
Dictionary<string, string> dict = new Dictionary<string, string>();
foreach (string key in ((System.Collections.Specialized.NameValueCollection)o).Keys)
dict[key] = ((System.Collections.Specialized.NameValueCollection)o)[key];
o = dict;
}
sb.Append(serializer.Serialize(o));
sb.Append(i == JavaScriptVars.Count - 1 ? ";" : ",");
i++;
}
sb.Append("</script>");
return sb.ToString();
}

所以现在我可以这样做:

JavaScriptVars["Name"] = "John"; //string
JavaScriptVars["Age"] = 32; //int
JavaScriptVars["Hobbies"] = new string[] { "Sewing", "Hiking" }; //array

在我的最后一页中,我得到:

<script>
var Name='John',Age=32,Hobbies=["Sewing", "Hiking"];
</script>

现在我有了一种强大的方法,可以将类型正确管理的值传递到页面,而无需脚本 block 或标签。

关于asp.net - 将 asp.net 值传递给 javascript block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8139464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com