我有两个下拉状态和City.Acording状态选择城市应该加载。所以我使用状态下拉更改事件来调用ajax方法来填充城市下拉。Jquery Ajax调用不会调用Asp.net mvc控制器的动作方法
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>
的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;
});
});
控制器 这是返回的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);
}
的问题是,当AJAX方法被调用它不调用Action方法controller.I双重检查URL中的控制器的操作方法和DataType都是完美的。但Action方法没有被调用。
可以手动在新标签中输入该网址,看看会发生什么?你还有这个问题吗? –
如果我手动输入URL,它不会显示json结果。相反,它转到登录页面.. –
这意味着请求未通过身份验证。我认为你的Ajax调用也是这个问题......你的应用程序是否需要授权? –