我需要将我的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代码中的变量值绑定到javascript块吗?这两个看起来都很混乱,因为它们不支持intellisense.
解决方法
我最终做了一些我认为更强大的事情.在母版页中我添加了这个:
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>
所以现在我有一种强大的方法可以将没有脚本块或标签的正确管理类型的值传递给页面.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。