尝试循环访问linq查询结果并以js代码显示

时间:2012-12-12 17:49:53

标签: c# javascript asp.net linq-to-sql

我使用谷歌地图API来显示网页上的位置。我已经使用静态位置工作,如下面的js代码所示。我已将确切位置放入sql表中,而是希望通过使用表而不是硬编码位置来显示位置。基本上我想循环我的linq结果并在javascript代码中显示。所以var locations =(我的结果集)我知道我的代码相当遥远,但认为它有助于显示我想要完成的任务。任何帮助,将不胜感激!感谢

protected void Page_Load(object sender, EventArgs e)
    {
        using (var db = new DataClasses1DataContext())
        {
            var place = (from p in db.Coordinates
                         select new {locName = p.LocationName, 
                             Coord1 = p.Coordinate1,  
                             Coord2 = p.Coordinate2}).ToList();

            //List<string> listPlaces = new List<string>();

            foreach (var result in place)
            {
                string name = place.locName;
                bool Coordinate1 = place.Coord1;
                bool Coordinate2 = place.Coord2;
            }
        }
    }

    <script type="text/javascript">
    var locations =
        ['Bondi Beach', -33.890542, 151.274856],
        ['Coogee Beach', -33.923036, 151.259052],
        ['Cronulla Beach', -34.028249, 151.157507],
        ['Manly Beach', -33.80010128657071, 151.28747820854187],
        ['Maroubra Beach', -33.950198, 151.259302]
    ];

编辑:我确实让它正确使用表中的第一条记录,但最终结果必须是所有行。

C#:     var place =(来自db.Coordinates中的p         其中p.LocationName ==“Adam”         select p).FirstOrDefault();         name = place.LocationName;         coord1 = place.Coordinate1.Value;         coord2 = place.Coordinate2.Value;

使用Javascript:     var name2 =“&lt;%= name%&gt;”;     var coordinate1 =“&lt;%= coord1%&gt;”;     var coordinate2 =“&lt;%= coord2%&gt;”;

1 个答案:

答案 0 :(得分:1)

你有很多选择:将它构建为字符串,在对象上使用JsonSeralizer,使用AJAX调用方法来获取JSON,还有许多其他选项......

对我来说,将它构建为字符串是一种简单易行的方法(对于这种复杂性和大小的对象):

在aspx页面上:

<script type="text/javascript">
var locations = <asp:literal id="locations" runat="server" />;
</script>

代码:

StringBuilder sb = new StringBuilder();
bool isFirst = true;
foreach (var result in place)
{
    if (!isFirst)
    {
        sb.Append(",");
    }
    isFirst = false;

    //Add the item data
    sb.AppendFormat("['{0}', {1}, {2}]", result.locName, result.Coord1, result.Coord2);
}
locations.Text = sb.ToString();

您还可以使用Page.ClientScript.RegisterClientScriptBlock以更动态的方式将脚本添加到页面中。