У меня есть изменение/функцию getJson которая выглядит следующим образом:Формат многопрофильным результата одно значение Json
$('#CountryId').change(function() {
$.getJSON('@Url.Action("StateList", "Manage")', {id: $('#CountryId').val()}, function (data) {
var items = '<option value="">Select a State</option>';
$.each(data.List, function (i, state) {
items += "<option value='" + state.Value + "'>" + state.Text + "</option>";
});
$('#StateId').html(items);
//Fail
//console.log(">>>>" + data.LatLng.Latitude);
//$('#Latitude').val(data.LatLng.Latitude);
//Success
//$.each(data.LatLng, function (i, country) {
// $('#Latitude').val(country.Latitude);
// console.log(">>>>" + country.Latitude);
//});
$('#CityId').html('<option value="">Select a City</option>');
});
});
Данные возвращаются из моего результата JSON штраф. Он возвращает statelist для этой CountryId (CountryId является FK из таблицы States), чтобы построить мой selectlist/dropdown для управления. Он также возвращает значение Широта и долгота для CountryId (из таблицы стран). Список состояний для моего списка избранных в порядке. Однако Широта и долгота будут только когда-либо одним набором значений (т. Е. Одной записью). Единственный способ, которым я могу заставить его работать в JQuery это с петлей .each
:
$.each(data.LatLng, function (i, country) {
$('#Latitude').val(country.Latitude);
console.log(">>>>" + country.Latitude);
});
мне не нужен цикл, хотя, так как это один набор значений. Есть ли другой, более чистый способ отформатировать это и избежать дополнительной функции? Как вы можете видеть из моего кода выше, я попытался это:
console.log(">>>>" + data.LatLng.Latitude);
$('#Latitude').val(data.LatLng.Latitude);
... и многого другой, и он всегда возвращается неопределенных. Вот мой StateList часть из контроллера:
[HttpGet]
public ActionResult StateList(int id)
{
var list = db.States.Where(d => d.CountryId == id).Select(d => new { Text = d.StateName, Value = d.StateId }).ToList();
var latlng = db.Countries.Where(d => d.CountryId == id).Select(d => new { d.Latitude, d.Longitude });
var result = new { List = list, LatLng = latlng };
return Json(result, JsonRequestBehavior.AllowGet);
}
Я пытался форматировать данные latlng
в этом ActionResult (т.е. ToList
, ToString
, Lat = d.Latitude
, и т.д. и т.п.), но JQuery, кажется, не волнует до тех пор, как я положил он в цикле.
Все примеры, которые я могу найти в Интернете, предназначены для списков json, которые отлично работали в разделе списка состояний. Но, похоже, я не могу найти ничего относительно единственной ценности json. И, похоже, до сих пор, вам нужно разбить значение на части, чтобы jquery мог интерпретировать его? Кто-нибудь знает трюк, чтобы исключить цикл?
Дамп для консолидации результата json и проверки 'LatLng'. Это, вероятно, массив, поэтому отредактируйте свой запрос, добавив '.Single()' или '.First()'. – Jasen
Try: 'console.log (data.LatLng [0] .Latitude);' – Hackerman
Спасибо, ребята, я не уверен, что 'data.LatLng [0] .Latitude' был скорее шагом устранения неполадок, но оба эти на самом деле работают на то, что я пытаюсь сделать. Я думаю, что искал '.Single()', поскольку он кажется немного более чистым/элегантным. Если бы это был «ToSingle()», я мог бы сам это понять. Меня поражает, что я не могу найти этот материал в google, в том числе о том, как сбрасывать все на консоль. В любом случае ... @Jasen Если вы хотите это написать, я дам вам кредит как ответ. Благодарю. – SumNone