是这样,我的页面有个google map, 里面需要动态加载location。map的js有一段是这样var latlng = new google.maps.LatLng(lng, lat);
        
我想从c#代码端加载lng和lat给js我改写成了var latlng = new google.maps.LatLng(<%# Eval("lng") %>, <%# Eval("lat") %>);但是不管c#里面的数据lng和lat是多少,这个都没有数据。c#端,不管我这样申明: public double lat, lng; 或按照属性的方法申明,都不能传递数据到js里 不知道我哪里没对?对了,c#端,我的lat和lng是在Page_load中赋值的。请大家不吝指点,谢谢!

解决方案 »

  1.   

    看你放哪里了,你要是放到xxx.js文件里面,那么恭喜你,你的确接不到后面的数据如果是这种你就需要把东西放到aspx文件里面另外<%# Eval("lng") %>是放在数据绑定控件中的写法
    如果是非数据绑定控件,你的写法应该是<%=lng.ToString()%>
      

  2.   

    你好, 我是直接放在aspx文件里的, 改成你说的<%=lng.ToString()%>了,数据虽然不是null值了,但依然是0,不知道为啥呢 我检查过,在Page_Load中是成功设置了的。
      

  3.   

    使用 # 开头的绑定表达式,你需要在 Page_PreRender 事件出了程序中执行 Page.DataBind()。实际上到底哪里执行 DataBind() 完全是你随意安排的,但是不能不执行它。
      

  4.   


    你好,我在Page_load中这样写的
    lat = 20.00;
    lng = 100.00;
    Page.DataBind();
    但依然在js端显示的是0,不是我想要的数据。
      

  5.   

    但是 # 开头的表达式要放在服务器控件的属性中,而不是随便写在字符串中。在一个页面上要输出 javascript 代码,你可以通过 RegisterClientScriptBlock 写到html中。写出的内容是你自己拼的。例如你可以使用这个方法写出整个你的脚本,也可以仅仅写出两个javascript变量的初始值。例如 var js="var lng=164.39; var lat=39.8;";把这个字符串写到html中,就够了。
      

  6.   

    你非要说是0,那俺们就没办法想了只能建议你把字段换成属性,并在set和get方法里,放入trace代码,同时启动页面的trace机制
    看看生成顺序,赋值顺序,获取顺序是不是你认为的那样了
      

  7.   

    我给你写个demo吧
    <%@ Page Language="C#" %><!DOCTYPE html>
    <script runat="server">    protected string aa { get; set; }
        protected string bb { get; set; }    protected void Page_Load(object sender, EventArgs e)
        {
            aa = "中国人";
            bb = "日本鸡";
        }    protected void Page_PreRender(object sender, EventArgs e)
        {
            this.PlaceHolder1.DataBind();
        }
    </script>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>演示如何绑定数据到脚本</title>
        <asp:PlaceHolder ID="PlaceHolder1" runat="server">
            <script type="text/javascript">
                alert('<%# aa %> 恼杀 <%# bb %>');
            </script>
        </asp:PlaceHolder>
    </head>
    <body>
    </body>
    </html>
      

  8.   

    首先,写#开头的绑定表达式,要在一个asp.net服务器控件里(但是不一定是在<Form>里)。其次,你需要调用DataBind(),才能(随时)绑定数据给服务器控件。就是这么简单。
    不过对于动态输出脚本,我认为写 RegisterClientScriptBlock 也是一种比较规范的做法。例如你可以写<%@ Page Language="C#" %><!DOCTYPE html>
    <script runat="server">    protected string aa { get; set; }
        protected string bb { get; set; }    protected void Page_Load(object sender, EventArgs e)
        {
            aa = "中国人";
            bb = "日本鸡";
        }    protected void Page_PreRender(object sender, EventArgs e)
        {
            this.PlaceHolder1.DataBind();
            ScriptManager.RegisterClientScriptBlock(this, typeof(Page), "初始化经纬度", "var lng=106.4; var lat=39.8;", true);
        }
    </script>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>演示如何绑定数据到脚本</title>
        <asp:PlaceHolder ID="PlaceHolder1" runat="server">
            <script type="text/javascript">
                onload = function () {
                    alert('<%# aa %> 恼杀 <%# bb %>');
                    alert('<%# bb %>再占 东经' + lng + '北纬' + lat);
                };
            </script>
        </asp:PlaceHolder>
    </head>
    <body>
        <form runat="server"></form>
    </body>
    </html>
      

  9.   

    放到js的话需要用ajax,返回json数据类型,然后把json数据转换成data对象,这样的话就可以使用json数据里的数据了