我正在使用AJAX从服务器上的数据库表中获取项目,以在我的剃须刀页面上填充一个下拉选择列表。
数据库表本身具有的列远远超过我实际希望使用AJAX返回的列。
我试图仅从表的每一行中仅拉出两列,但是在尝试这样做时,选择下拉列表将这些元素显示为未定义。
我有一个类似的AJAX请求,当我提取整个表的内容时,该请求可以工作,但是该特定表始终只有两列。在这种情况下,我只需要一个大表中的两列,并且不想通过将更多的数据拉到Web页面中来浪费应用程序的效率。
页面模型:
public IActionResult OnGetSelectAllMarkers()
{
var marker = _context.Marker
.Where(x => x.LayerGroupID == 1)
.Select(x => new
{
x.ID,
x.MarkerName,
// etc, we only include the columns we need for the query.
}).ToList();
return new JsonResult(marker);
}
AJAX:
var options = {};
options.url = "/Maps/Edit?handler=SelectAllMarkers";
options.type = "GET";
options.dataType = "json";
options.success = function (data) {
data.forEach(function (element) {
$("#editMarkerSelect").append('<option value="' + element.ID + '">' + element.MarkerName + '</option>');
});
$('#editMarkerSelect option').clone().appendTo('#bindToMapObjectSelect');
}
options.error = function () {
$("#editMarkerSelectMessageBar").html("Error while making Ajax call!");
setTimeout(function () { $("#editMarkerSelectMessageBar").html(''); }, 5000);
};
$.ajax(options);
我想使用AJAX检索的项目只是数据库行ID和另一列称为MarkerName的列
下面的屏幕快照显示我正在服务器上提取正确的项目,因此这里有AJAX不喜欢的东西,我在浏览器调试工具中没有任何错误,所以不确定如何诊断。 >
更新:我也尝试了下面的更改,但仍然发现AJAX将对象数组视为未定义:
public IActionResult OnGetSelectAllMarkers()
{
List<Marker> data = _context.Marker
.Where(x => x.LayerGroupID == 1)
.Select(x => new Marker
{
ID = x.ID,
MarkerName = x.MarkerName,
// etc, we only include the columns we need for the query.
}).ToList();
return new JsonResult(data);
}
我正在使用AJAX从服务器上的数据库表中获取项目,以在我的剃须刀页面上填充一个下拉选择列表。数据库表本身具有的列远远多于我实际上想要使用...返回的列。
嗯,我终于弄明白了发生了什么,两件事。我的模型页面上的OnGetSelectAllMarkers()方法显示在我的问题的第一部分,它是错误的。该方法正在返回带有匿名类型的列表,并且鉴于从服务器返回的对象是未定义的,因此AJAX似乎不喜欢这种方法。