2016-12-07 1 views
0

Я хочу заполнить второе раскрывающееся меню с первого.JQuery возвращает значение «undefined» .net core

Все работает, но названия городов и значения просто возвращают «неопределенные». * Количество городов возвращается правильно, но имя и значение всегда «не определены». *

Контроллер:

[HttpPost] 
    public ActionResult getCityJson(string stateId) 
    { 
     int _stateid = Convert.ToInt32(stateId); 
     List<Cities> objcity = new List<Cities>(); 
     objcity = _db.Cities.Where(m => m.stateID == _stateid).ToList(); 
     SelectList obgcity = new SelectList(objcity, "CityID", "CityName", 0); 
     return Json(obgcity); 
    } 

View Page:

$("#istateid").change(function() { 
     var id = $("#istateid").val(); 
     $.ajax({ 
      url: '@Url.Action("getCityJson", "Home")', 
      data: { stateId: id }, 
      cache: false, 
      type: "POST", 
      success: function (data) { 
       var markup = "<option value='0'>Select City</option>"; 
       for (var x = 0; x < data.length; x++) { 
        markup += "<option value=" + data[x].Value + ">" + data[x].Text + "</option>"; 
       } 
       $("#icityid").html(markup).show(); 
      }, 
      error: function (reponse) { 
       alert("error : " + reponse); 
      } 
     }); 
    }); 

Я также попытался Public JsonResult и вернуться JsonResult и общественной SelectList и вернуть SelectList, но ни один из них не работал.

И я также попытался это:

$("#istateid").change(function() { 
$.ajax({ 
type: "POST", 
url: '@Url.Action("getCityJson", "Home")', 
data: { stateId: $("#istateid > option:selected").attr("value") }, 
success: function (data) { 
    var items = []; 
    items.push("<option>--Choose Your City--</option>"); 
    $.each(data, function() { 
     items.push("<option value=" + this.Value + ">" + this.Text + "</option>"); 
    }); 
    $("#icityid").html(items.join(' ')); 
    } 
}) }); 

Я получаю это в браузере: (TypeError:. Данные [х] не определено)

$("#istateid").change(function() { 
     var id = $("#istateid").val(); 
     $.ajax({ 
      url: '/Home/getCityJson', 
      data: { stateId: id }, 
      cache: false, 
      type: "POST", 
      success: function (data) { 
       var markup = "<option value='0'>Select City</option>"; 
       for (var x = 0; x < data.length; x++) 
       { markup += "<option value=" + data[x].CityID + ">" + data[x].CityName + "</option>"; } 
       $("#icityid").html(markup).show(); 
      }, 
      error: function (reponse) { 
       alert("error : " + reponse); 
      } 
     }); 
    }); 

<option value="0">Select City</option> 
<option value="undefined">undefined</option> 
<option value="undefined">undefined</option> 
<option value="undefined">undefined</option> 
+1

Конечно, они не определены. Вы даже посмотрели данные json перед написанием кода javascript? Вы возвращаете объект City, который может иметь свойства типа «Name» или «CityId», но в вашем коде вы получаете доступ к «Value» и «Text». Вам либо нужно создать новую модель (или вернуть анонимную модель), либо использовать свойства ** Model **, а не Value/Text. На стороне примечания, не вызывайте код синхронизации в вашем методе, используйте async полностью. он блокирует поток запросов и снижает общую производительность и масштабируемость. – Tseng

+0

Попробуйте этот параметр для for (var x = 0; x "+ data [x] .CityName +" "; } ' –

+0

Еще не определено. Я тоже пробовал. this.Value, this.Text, но ничего не работает. Когда я просто набираю «this», он возвращает [Object object] – Neok

ответ

0

Решено:

items.push("<option value=" + this.value + ">" + this.text + "</option>"); 

Ценность и текст верблюда. Особая благодарность @agua с Марса

Другие коды Я пробовал:

 $("#istateid").change(function() { 
     $.ajax({ 
     type: "POST", 
     url: '@Url.Action("getCityJson", "Admin")', 
     data: { stateId: $("#istateid > option:selected").attr("value") }, 
     success: function (data) { 
     var items = []; 
      items.push("<option>--Choose Your Area--</option>"); 
      $.each(data, function() { 
      items.push("<option value=" + this.Value + ">" + this.Text + "</option>"); 
      }); 
      $("#icityid").html(items.join(' ')); 
     } 
     }) 
     }); 

контроллер:

[HttpPost] 
    public JsonResult getCityJson(string stateId, string selectCityId = null) 
    { 
     return Json(getCity(stateId, selectCityId)); 
    } 
    public SelectList getCity(string stateId, string selectCityId = null) 
    { 
     IEnumerable<SelectListItem> cityList = new List<SelectListItem>(); 
     if (!string.IsNullOrEmpty(stateId)) 
     { 
      int _stateId = Convert.ToInt32(stateId); 
      cityList = (from m in db.Cities where m.StateID == _stateId select m).AsEnumerable().Select(m => new SelectListItem() { Text = m.CityName, Value = m.CityID.ToString() }); 
     } 
     return new SelectList(cityList, "Value", "Text", selectCityId); 
    } 
0

попробовать это:

  success: function (data) { 
      var response=JSON.parse(data); 
      var markup = "<option value='0'>Select City</option>"; 
      for (var x = 0; x < response.length; x++) 
      { markup += "<option value=" + response[x].CityID + ">" + response[x].CityName + "</option>"; } 
      $("#icityid").html(markup).show(); 
     }, 
Смежные вопросы