Javascript Jquery Ajax调用不调用Asp.net mvc控制器操作方法
我有两个下拉列表State和City。根据状态,应该加载所选的城市。所以我使用State下拉列表change事件调用ajax方法来填充City下拉列表 HTMLJavascript 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>
<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);
}