【问题标题】:How to pass Generic List from code behind to javascript如何将通用列表从后面的代码传递给 javascript
【发布时间】:2014-12-13 10:42:23
【问题描述】:

是否可以在 java 脚本中将通用地址列表传递给客户端?

列表数据在服务器端可用,我想将列表发送到 java 脚本函数,该函数将对所有地址进行地理编码,然后将列表返回到服务器端。

  • 用户点击搜索
  • 在返回页面后,会生成列表。
  • 在页面上显示结果之前,调用 java 脚本函数并循环遍历列表并获取地理编码并更新列表并将结果返回给服务器。
  • 在页面上显示结果。

到目前为止我已经尝试过,不知道如何在 javascript 函数中读取列表,然后将结果返回到服务器。

 Private Shared Function CreateGenericArray() As List(Of AddressInfo)
    Dim _AddressInfo As New List(Of AddressInfo)()
    Dim lp As New AddressInfo()
    lp.AddressID = 1
    lp.AddressLine1 = "My Address"
    lp.City = "PA"
    lp.PostalCode = "11654"
    _AddressInfo.Add(lp)

    Return _AddressInfo
End Function

    Public Sub ConvertToJSON()
     Dim jss1 As New JavaScriptSerializer()
     Dim _myJSONstring As String = jss1.Serialize(CreateGenericArray())
     Dim player As String = (Convert.ToString("var player=") & _myJSONstring) + ";"
     Page.ClientScript.RegisterClientScriptBlock(Me.[GetType](), "player123", player, True)       
End Sub



<form id="form1" runat="server">

    <script type="text/javascript">
        $(player).each(function (index, person) {
            alert('AddressID: ' + person.AddressID +
          ' AddressLine1: ' + person.AddressLine1 +
          ' City: ' + person.City
        );
    });
    </script>
</form>

【问题讨论】:

  • 使用Json.NET,并作为Json发送。
  • 查看一些类似的 SO 以前的帖子stackoverflow.com/questions/15747264/…
  • 这不是同一个问题。我也想从服务器端读取更新的列表。
  • 这是否意味着您需要可用于返回服务器的列表?如a)页面加载(无数据,加载搜索表单),b)搜索提交(获取列表)c)页面加载2(处理列表结果客户端并显示)。 d)返回圈(新帖子,这里发生了什么?另一个搜索,用户选择选项..?)

标签: javascript asp.net json vb.net


【解决方案1】:

我将使用 C# 而不是 Visual Basic,但您基本上可以这样做:

代码背后:

JavaScriptSerializer serializer = new JavaScriptSerializer();
List<Address> deserialize = serializer.Deserialize<List<Address>>(address);
foreach(Address address in deserialize)
{
     // Do something with Exposed Properties:
}

Address Class 将非常非常基本:

public class Address
{
     public int Id { get; set; }
     public string Street { get; set; }
     public string City { get; set; }
     public string State { get; set; }
     public string Zip { get; set; }
}

这本质上是后端,现在你在前端要做的就是:

function BuildAddress(Id, Street, City, State, Zip) {
     var address = null;
     item = {
          Id: Id,
          Street: Street,
          City: City,
          State: State,
          Zip: Zip
     };
}

一个干净的函数来构建我们的对象。现在,我们实际上需要传递该内容:

var address = new Array();
var convertAddress;

address.push(BuildAddress(id, street, city, state, zip));
convertedAddress = JSON.stringfy(address);

$.ajax({
     url: '<%= Page.ResolveUrl("~/Services/Location.aspx") %>'
     data: { Address: convertedAddress},
     type: 'POST',

     success: function (address) {
          var result = JSON.parse(address);
          // Do something with result, example: result[0].City
     }
});

这将以您尝试的方式传递数据。不过你得玩一下。

【讨论】:

  • 我已经设法通过从代码后面调用脚本块将数据发送到客户端脚本,然后通过调用asp.net页面的Web服务方法将数据从客户端发送回服务器端。在 Web 服务级别,我认为我只能将返回的数据保存在会话中,因为我无法在此方法中访问服务器控件。我是否需要刷新我的 asp.net 页面来调用会话数据,然后在网页上显示它?或者将数据保存在客户端的会话中,然后回发?我必须刷新此页面吗?在页面上显示之前,我需要将数据发送回服务器进行进一步修改。
  • 这确实是一个全新的问题,但是我传达的方法将整个对象发送和发送。因此,您不需要直接访问控件、获取数据并只需使用 Javascript 来修改页面上的区域。所以你需要更“清楚”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-05
  • 1970-01-01
  • 2013-11-20
  • 2017-05-11
  • 2013-09-23
  • 1970-01-01
相关资源
最近更新 更多