Javascript обработка данных на стороне сервера в ASP.NET

У меня есть программа, которая получает список местоположений из базы данных sql через запрос linq-to-entity в aC# code-behind. Этот список необходимо проанализировать методом javascript (Google maps api v3), чтобы отобразить местоположения на карте. Мне нужно найти лучший способ получить информацию из запроса на стороне сервера для функции javascript для обработки. Какие-нибудь мысли!?

Редактировать: ошибка при сериализации...

JavaScriptSerializer jss = new JavaScriptSerializer();
            using (RamRideOpsEntities myEntities = new RamRideOpsEntities())
            {
                var validDates = (from a in myEntities.AdminOptions
                                  select new { a.ValidDate1, a.ValidDate2 }).First();

                var allWaitingRides = (from r in myEntities.Rides
                                       where ((r.TimeOfCall >= validDates.ValidDate1 ||
                                            r.TimeOfCall <= validDates.ValidDate2) && r.Status.Equals("Waiting", StringComparison.OrdinalIgnoreCase))
                                       orderby r.TimeOfCall descending
                                       select r).ToList();

                json_topTen.Value = jss.Serialize(allWaitingRides.GetRange(0, 10).ToArray());
            }

Offset and length were out of bounds for the array or count is greater than the number of elements from index to the end of the source collection.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.ArgumentException: Offset and length were out of bounds for the array or count is greater than the number of elements from index to the end of the source collection.

Source Error: 


Line 106:                                       select r).ToList();
Line 107:
Line 108:                json_topTen.Value = jss.Serialize(allWaitingRides.GetRange(0, 10).ToArray());
Line 109:            }
Line 110:        }

Source File: D:\DOCUMENTS\RamRide\RamRideOps_PL\RamRideOps\RamRideOps\Ops\DispatchCar.aspx.cs    Line: 108 

Stack Trace: 


[ArgumentException: Offset and length were out of bounds for the array or count is greater than the number of elements from index to the end of the source collection.]
   System.ThrowHelper.ThrowArgumentException(ExceptionResource resource) +52
   System.Collections.Generic.List`1.GetRange(Int32 index, Int32 count) +70
   RamRideOps.DispatchCar.setTopTen() in D:\DOCUMENTS\RamRide\RamRideOps_PL\RamRideOps\RamRideOps\Ops\DispatchCar.aspx.cs:108
   RamRideOps.DispatchCar.Page_Load(Object sender, EventArgs e) in D:\DOCUMENTS\RamRide\RamRideOps_PL\RamRideOps\RamRideOps\Ops\DispatchCar.aspx.cs:41
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
   System.Web.UI.Control.OnLoad(EventArgs e) +91
   System.Web.UI.Control.LoadRecursive() +74
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2207

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.272

3 ответа

Решение

Если ваши объекты достаточно легки, просто сериализуйте их в массив JSON и передайте их обратно клиенту. Если они не очень легкие, создайте несколько объектов передачи данных, чтобы выполнить работу.

Вот как может выглядеть ваш ajax-запрос (используя jQuery):

$.ajax({url: "url/to/handler.ashx",
    success: function(data, state) {
        //data represents the array of objects sent back from the server.
    }
});

Ваш обработчик будет вести себя так, как указано ниже:

    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "application/x-javascript";
        //fetch data from database.
        //return data by writing the serialized objects directly to context.Response.OutputStream
    }

Самый простой способ экспортировать данные из C#, возможно, не самый простой способ использовать данные в JavaScript, но я остановлюсь на этом с последней точки зрения.

Вероятно, лучший способ сделать это с точки зрения JavaScript - это экспортировать содержимое вашего запроса в представление JSON, возможно, используя JSONP для его передачи клиенту. Вы можете использовать стандарт XMLHttpRequest ПОЛУЧИТЬ эти данные с вашего сервера и оттуда проанализировать их на стороне клиента для использования в JS.

На сайте JSON.org есть список многих парсеров / сериализаторов JSON, доступных в C#.

Если вы используете asp.net mvc, вы можете вернуть JSON клиенту, используя вызов javascript/jquery. Вот подсказка о том, как это можно сделать от одного из крупнейших экспертов по MVC (Фил Хаак): Callng MVC из Javascript

Если вы используете стандартный asp.net, вы можете использовать веб-методы или страницы asmx для возврата данных JSON.

Сделайте вызов w/ linq для объектов в любом из вышеперечисленных, затем преобразуйте в json и передайте его вниз...

Похоже, вы используете стандартный asp.net (не mvc) - посмотрите этот урок:

ASP.NET веб-методы и jquery

Другие вопросы по тегам