Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jquery Ajax调用不调用Asp.net mvc控制器操作方法_Javascript_C#_Jquery_Ajax_Asp.net Mvc - Fatal编程技术网

Javascript Jquery Ajax调用不调用Asp.net mvc控制器操作方法

Javascript Jquery Ajax调用不调用Asp.net mvc控制器操作方法,javascript,c#,jquery,ajax,asp.net-mvc,Javascript,C#,Jquery,Ajax,Asp.net Mvc,我有两个下拉列表State和City。根据状态,应该加载所选的城市。所以我使用State下拉列表change事件调用ajax方法来填充City下拉列表 HTML <div class="row"> <div class="col-sm-6 "> <div class="form-group"> <label>State</label>

我有两个下拉列表State和City。根据状态,应该加载所选的城市。所以我使用State下拉列表change事件调用ajax方法来填充City下拉列表

HTML

  <div class="row">
        <div class="col-sm-6 ">
            <div class="form-group">
                <label>State</label>
                @Html.DropDownListFor(m => m.State, Model.States, "Please select a State", new { @class = "form-control" })
            </div>
        </div>
    </div>

    <div class="row">
        <div class="col-sm-6 ">
            <div class="form-group">
                <label>Cities</label>

                @Html.DropDownListFor(m => m.CityRegisterScreen, new SelectList(string.Empty, "Id", "Name"), "Please select a city", new { @class = "form-control" })
            </div>
        </div>
    </div>

陈述
@DropDownListFor(m=>m.State,Model.States,“请选择一个状态”,新建{@class=“form control”})
城市
@DropDownListFor(m=>m.CityRegisterScreen,new SelectList(string.Empty,“Id”,“Name”),“请选择一个城市”,new{@class=“form control”})
JavaScript 这包含Jquery和Javascript代码

  $(document).ready(function () {


        $("#State").on("change", function () {  // whenever a selection is made
            $("#CityRegisterScreen").empty();

            var id = $("#State").val();


            $.ajax({
                type: 'GET', // we are calling json method
                url: '@Url.Action("GetCitiesByDistrict", "Account")',
                dataType: 'json',
                contentType: 'application/json; charset=utf-8',
                data: { id: id },
                success: function (cities) {

                    $.each(cities, function (i, city) {
                        $("#CityRegisterScreen").append('<option value="' + city.value + '">' +
                            city.Text + '</option>');
                    });
                },
                error: function (ex) {
                    alert('Failed to retrieve cities.' + ex);
                }
            });
            return false;
        });


    });
$(文档).ready(函数(){
$(“#State”)。在(“change”上,每当进行选择时,函数(){//
$(“#城市注册屏幕”).empty();
var id=$(“#State”).val();
$.ajax({
键入:“GET”,//我们正在调用json方法
url:'@url.Action(“GetCitiesByDistrict”、“Account”),
数据类型:“json”,
contentType:'application/json;charset=utf-8',
数据:{id:id},
成功:功能(城市){
美元。每个(城市,功能(i,城市){
$(“#城市注册屏幕”)。附加(“”+
城市。文本+“”);
});
},
错误:函数(ex){
警报(“检索城市失败”。+ex);
}
});
返回false;
});
});
控制器 这是返回Json的控制器操作方法

 public JsonResult GetCitiesByDistrict(int id)
    {
        List<SelectListItem> cities = new List<SelectListItem>();

        var city = new List<City>();

        using (ApplicationDbContext context = new ApplicationDbContext())
        {
            city = context.Cities.Where(e => e.DistrictId == id).ToList();
        }

        return Json(new SelectList(city, "Id", "Name"), JsonRequestBehavior.AllowGet);

    }
公共JsonResult GetCitiesByDistrict(int-id) { 列表城市=新列表(); var city=新列表(); 使用(ApplicationDbContext context=new ApplicationDbContext()) { city=context.Cities.Where(e=>e.DistrictId==id.ToList(); } 返回Json(新的选择列表(城市,“Id”,“名称”),JsonRequestBehavior.AllowGet); }
问题是当调用ajax方法时,它不会调用controller中的Action方法。我仔细检查了URL和数据类型,它们都很完美。但是Action方法没有被调用。

这太傻了!!!我怎么会错过这个。感谢@Rajshekar Reddy的评论,它指导了我。我缺少
[AllowAnonymous]
属性

  [AllowAnonymous]
    public JsonResult GetCitiesByDistrict(int id)
    {
        List<SelectListItem> cities = new List<SelectListItem>();

        var city = new List<City>();

        using (ApplicationDbContext context = new ApplicationDbContext())
        {
            city = context.Cities.Where(e => e.DistrictId == id).ToList();
        }

        return Json(new SelectList(city, "Id", "Name"), JsonRequestBehavior.AllowGet);

    }
[AllowAnonymous]
公共JsonResult GetCitiesByDistrict(内部id)
{
列表城市=新列表();
var city=新列表();
使用(ApplicationDbContext context=new ApplicationDbContext())
{
city=context.Cities.Where(e=>e.DistrictId==id.ToList();
}
返回Json(新的选择列表(城市,“Id”,“名称”),JsonRequestBehavior.AllowGet);
}

这是根据所选国家/地区加载状态的代码。试试这个解决方案

HTML

剧本

function GetCity(_stateId) {
$("#CustAddr_State_ID").empty().trigger('change');
var newOption = new Option("Select State", 0, true, true);
$("#CustAddr_State_ID").append(newOption).trigger('change');

if (_stateId != null && _stateId != "") {
    var url = "/Ajax/GetCityByStaeId/";
    $.ajax({
        url: url,
        data: { stateid: _stateId },
        cache: false,
        type: "POST",
        success: function (data) {

            for (var x = 0; x < data.length; x++) {
                var newOption = new Option(data[x].Text, data[x].Value, true, true);
                $("#CustAddr_State_ID").append(newOption).trigger('change');
            }
            $('#CustAddr_State_ID').val('0').trigger('change');

        },
        error: function (reponse) {
            //alert("error : " + reponse);
        }
    });
}
函数GetCity(\u stateId){ $(“#CustAddr_State_ID”).empty().trigger('change'); var newOption=新选项(“选择状态”,0,真,真); $(“#CustAddr_State_ID”).append(newOption).trigger('change'); 如果(_stateId!=null&&u stateId!=“”){ var url=“/Ajax/getcitybysystaeid/”; $.ajax({ url:url, 数据:{stateid:_stateid}, cache:false, 类型:“POST”, 成功:功能(数据){ 对于(var x=0;x }

控制器

 [HttpPost]
    public ActionResult GetCityByStaeId(int stateid)
    {
        List<State> objcity = new List<State>();
        objcity = _state.GetState().Where(m => m.State_Country_ID == stateid).ToList();
        SelectList obgcity = new SelectList(objcity, "State_ID", "State_Name", 0);
        return Json(obgcity);
    }
[HttpPost]
公共操作结果GetCityByStateId(int stateid)
{
List objcity=新列表();
objcity=\u state.GetState().Where(m=>m.state\u Country\u ID==stateid.ToList();
SelectList objcity=新建SelectList(objcity,“状态ID”,“状态名称”,0);
返回Json(obgcity);
}

您能否在新选项卡中手动输入该URL并查看结果?你还知道这个问题吗?如果我手动输入URL,它不会显示json结果。相反,它会转到登录页..这意味着请求没有经过身份验证。我认为你的Ajax调用也存在同样的问题。。。您的应用程序需要授权吗?@AslamJiffry如果在您输入页面URL时显示登录页面,则表示其需要授权。在调用的方法中使用[AllowAnnonymous]仅在不需要该页面安全保护的情况下使用[AllowAnnonymous],添加测试就可以了。发回
SelectList
只会降低性能-创建一个具有所需两个属性的匿名对象。并建议您在中研究代码-如果编辑现有数据,则使用
new SelectList(string.Empty,“Id”,“Name”)
意味着如果您需要返回视图,下拉列表将无法正确填充,因为
ModelState
无效。
 [HttpPost]
    public ActionResult GetCityByStaeId(int stateid)
    {
        List<State> objcity = new List<State>();
        objcity = _state.GetState().Where(m => m.State_Country_ID == stateid).ToList();
        SelectList obgcity = new SelectList(objcity, "State_ID", "State_Name", 0);
        return Json(obgcity);
    }