#c# #jquery #json #asp.net-mvc
#c# #jquery #json #asp.net-mvc
Вопрос:
У меня есть словарь, который содержит, ну, строки: Ключ: «X» Значение: «Y», например, это возвращается через JsonResult в моем контроллере:
public JsonResult GetMachineSettings(string machine)
{
DataTable _dt = getmysettings_SqlCall;
TaskSetting _mr= new TaskSetting(); //simply a dictionary of string,string
foreach (DataRow _row in _dt.Rows)
{
_mr.Settings.Add( _row.Field<string>("SettingKey"),
_row.Field<string>("SettingValue"));
}
return Json(_mr);
}
Это было вызвано и возвращено с помощью вызова jquery Ajax:
<script type="text/javascript">
$('#machines').change(function () {
$(this).parents('form').submit();
$.ajax({
type: 'POST',
url: '@Url.Action("GetMachineSettings")', // we are calling json method
dataType: 'json',
data: {
_items: $("#machines").val() },
success: function(_items) {
var a=JSON.parse(_items);
$.each(a.Record, function (i, record) {
alert(record.key " " record.value);
});
},
error: function(ex) {
alert('Failed to retrieve Tasks.' ex);
}
});
return false;
});
но это не удается, и публикуется строка со всеми моими данными в формате Json из-за исключения нулевой ссылки в цикле foreach:
{«Настройки»:{«X»:»Y»}}
Что я пытаюсь сделать, так это показать простое оповещение (на данном этапе), которое будет отображать пару ключ / значение (и, что еще лучше, оповещение для каждого ключа, затем значение). Но я не уверен, как это можно выполнить.
Комментарии:
1. Можем ли мы видеть исходные данные, возвращающиеся с сервера? Добавьте строку
console.log(_items);
в качестве первой строки вашегоsuccess
обработчика…2. это даже не попадает в обработчик успеха. Он просто завершается ошибкой и выводит приведенный мной пример…
3. Не уверен, что здесь getmysettings_SqlCall.
Ответ №1:
Я попытался воспроизвести ваш код, измените вызов AJAX на это
Удалить var a=JSON.parse(_items);
, поскольку _items уже является объектом JSON
Измените способ доступа (ключ, запись) в each
методе.
И обратите внимание, что ваше свойство находится Settings
в TaskSetting
not Record
.
$.ajax({
type: 'POST',
url: '@Url.Action("GetMachineSettings")', // we are calling json method
dataType: 'json',
data: {
_items: $("#machines").val()
},
success: function (_items) {
//var a = JSON.parse(_items);
$.each(_items.Settings, function (key, record) {
console.log(key " " record);
});
},
error: function (ex) {
alert('Failed to retrieve Tasks.' ex);
}
});