我正在尝试对地图上显示的数据应用过滤器,但是由于某些原因,我设置的Ajax调用未执行。我可以在视图中到达console.log行,但此后再也不执行Ajax调用中的任何操作。这是在ASP.NET MVC中完成的。
在这个项目中,其他开发人员也以类似的方式对Ajax进行了类似的调用。我试图重组我的代码,使其以类似的方式工作,但是没有成功。其他开发人员也不知道发生了什么。
控制器中的C#
[HttpPost]
public ActionResult MapFilter(string filterLake, bool filterPets)
{
var filteredProperties = db.Properties.Include(a => a.PropertyCategory).Where(b => b.Status == true).Select(x => new { x.PropertyName, x.PropertyId, x.RatePerNight, x.RatePerWeek, x.MarketingTitle, x.Latitude, x.Longitude, x.Pets, x.PropertyCategory.PropertyCategoryName });
if (filterLake != "")
filteredProperties = filteredProperties.Where(a => a.PropertyCategoryName == filterLake);
if (filterPets != true)
filteredProperties = filteredProperties.Where(a => a.Pets == filterPets);
var jsonProperties = JsonConvert.SerializeObject(filteredProperties);
return new JsonResult()
{
Data = jsonProperties,
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
视图中的JavaScript和Ajax
var filterLake, filterPets;
var btnApplyFilters = document.getElementById("applyFilters");
var filterLakeNode = document.getElementById("filterLake");
var filterPetsNode = document.getElementById("filterPets");
$(document).ready(function () {
btnApplyFilters.onclick = function () {
filterLake = filterLakeNode.options[filterLakeNode.selectedIndex].value;
filterPets = filterPetsNode.options[filterPetsNode.selectedIndex].value;
console.log("Lake:|" + filterLake + "| Pets:|" + filterPets + "|");
$.ajax({
url: "/Estates/MapFilter",
type: "Post",
data: {
"filterLake": filterLake,
"filterPets": filterPets
},
success: function (result) {
filteredMapData = result;
console.log("Result = " + result);
loadMapMarkers(true)
}
});
};
})
当我在localhost上运行程序时,我可以访问
console.log("Lake:|" + filterLake + "| Pets:|" + filterPets + "|");
行没有问题。之后的任何内容都无法运行。
答案 0 :(得分:0)
您需要检查filterPets
的值,该值必须为true/false
,然后模型联编程序才能以bool类型进行映射。
使用原始类型(bool, int, float
)时,应使用nullable
类型bool?
来防止大小写错误的格式。
[HttpPost]
public ActionResult MapFilter(string filterLake, bool? filterPets)
{
}
使用此参数,如果filterPets
的值错误,它将为null。