angularjs - asp.net web api 使用 angularJS 调用自定义方法

标签 angularjs asp.net-web-api kendo-dropdown

我有一个 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/

相关文章:

c# - 未触发异常过滤器

javascript - 如何根据 json 属性在 Kendo jquery 下拉列表中设置默认值

javascript - 将自定义 CSS 类传递给 Kendo 的下拉小部件

angularjs 应用程序在 ui-select 字段中的占位符文本中不显示特殊字符

angularjs - 第二次点击(或取消点击)时评估的 ng-click 函数

javascript - angularjs 奇怪的数组行为,可能与异步执行有关?

angularjs - 如何交换标签和单选按钮位置 Material AngularJS

asp.net-mvc - ASP.Net MVC 和 WebAPI 加密

ASP.NET CORS 阻止字体请求

kendo-ui - Kendo DropDownList 默认项目与 Kendo Grid 绑定(bind)