我有一个 angularJS Controller ,我在其中放置了一个剑道级联下拉列表。对于下拉列表值,在剑道数据源上读取我正在调用 web api 服务。
对于第一个字段,调用了 api GetDivisions() 并且它也响应,但是对于第二个值,未调用 GetCascadeDistrict() 方法再次调用 GetDivisions() 方法。我该如何解决这个问题。需要帮助
这是带有剑道级联下拉列表的 Angular Controller 。
app.controller("filterCtrl", function($scope, $sce,$http) {
var i;
$scope.dashImgSrc = $sce.trustAsResourceUrl('Content/Images/Bangladesh_Govt.gif');
$(document).ready(function () {
var divisions = $("#divisions").kendoComboBox({
filter: "contains",
placeholder: "select a divisions...",
dataTextField: "Name",
dataValueField: "Id",
animation: {
close: {
effects: "zoom:out",
durations:250
}
},
dataSource: {
type: "json",
serverFiltering: true,
transport: {
read: "api/AreaService/GetDivisions()"
}
},
change: function () {
i = divisions.value();
alert("1st hit"+i);
}
}).data("kendoComboBox");
var districts = $("#districts").kendoComboBox({
autoBind: false,
cascadeFrom: "divisions",
filter: "contains",
placeholder: "select a district",
dataTextField: "Name",
dataValueField: "Id",
dataSource: {
type: "json",
serverFiltering: true,
transport: {
read: function () {
alert("2nd hit");
//$http.get("/api/AreaService/GetCascadeDistrict(i)").success(function() {
// alert("Hit the district api");
//}).error(function() {
// alert("Error");
//});
$http({ method: "GET", url: 'api/AreaService/GetCascadeDistrict(i)' }).
success(function() {
alert("Actually it hit the custome get method");
}).
error(function() {
alert("Not hit or other problem");
});
}
}
}
}).data("kendoComboBox");
var upazila = $("#upazila").kendoComboBox({
autoBind: false,
cascadeFrom: "districts",
filter: "contains",
placeholder: "select a upazila...",
dataTextField: "Name",
dataValueField: "Id",
dataSource: {
type: "json",
serverFiltering: true,
transport: {
read: function() {
$http.get("/api/AreaService/GetCascadeDistrict(i)").success(function() {
}).error(function() {
});
}
}
}
}).data("kendoComboBox");
$("#get").click(function () {
var divisionInfo = "\Division: { id: " + divisions.value() + ", name: " + divisions.text() + " }",
districtInfo = "\nDistrict: { id: " + districts.value() + ", name: " + districts.text() + " }",
upazilaInfo = "\nUpazila: { id: " + upazila.value() + ", name: " + upazila.text() + " }";
alert("Road details:\n" + divisionInfo + districtInfo + upazilaInfo);
});
});
});
Web api 在这里
public class AreaServiceController : ApiController
{
private readonly AreaFilterManager _db = new AreaFilterManager();
[System.Web.Http.HttpGet]
public IEnumerable<Division> GetDivisions()
{
return _db.GetDivisions();
}
[System.Web.Http.HttpGet]
public IEnumerable<District> GetCascadeDistrict(int? division)
{
return _db.GetCascadeDistrict(division);
}
[System.Web.Http.HttpGet]
public IEnumerable<Thana> GetCascadeUpzilla(int? district)
{
return _db.GetCascadeThana(district);
}
}
最佳答案
您需要通过 来分隔/区分您的调用CRUD 操作或通过 Attribute Routing 取决于您的 WebApi
版本您在您的项目中使用。
您不能使用相同的 CRUD HttpGet
在同一个类/ Controller 中两次,而没有放置不同的路由属性。
你需要记住,在WebApi
这些方法不像在常规编程中那样按名称调用,因此 WebApi
类/ Controller 不知道您打算从客户端调用哪种方法(在您的情况下)。
这就是为什么你需要:WebApi
Ver 1:通过分离/区分您的调用CRUD 操作。WebApi
Ver 2 : 通过 分离/区分您的调用Attribute Routing .
关于angularjs - asp.net web api 使用 angularJS 调用自定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35285809/