2013-08-06 2 views
0

Я заселены два DropDownList на мой взгляд:Второй DropdownList всегда заполняет «[]« Значение?

<tr> 
     <td class="info_label">City</td> 
     <td>@Html.DropDownListFor(m=>m.User.City,Model.City,"-- Chọn thành phố --",new { @class = "dropdown" })</td> 
    </tr> 
    <tr> 
     <td class="info_label">Ward</td> 
     <td>@Html.DropDownListFor(m => m.User.Ward, Model.Ward, "-- Chọn quận --" ,new { @class = "dropdown" })</td> 
    </tr> 

Когда я изменить значение первого DDL, то второй DDL также изменяются в зависимости от значения первого. И у меня есть сценарий jquery для этого. Вот мой код JQuery:

function LocationValue() { 
    $("#User_City").change(function() { 
     var cityName = $("#User_City").val(); 
     if (cityName == null) { 
      $("Ward").prop("disabled", true); 
     } 
     else { 
      $("Ward").prop("disabled", false); 
      getWards(cityName); 
     } 
    }); 
} 
function getWards(cityName) { 
    $.ajax({ 
     url: "/Checkout/Wards", 
     data: { CityName: cityName }, 
     dataType: "json", 
     type: "POST", 
     error: function() { 
      return; 
     }, 
     success: function (data) { 
      var items = ""; 
      $.each(data, function (i, item) { 
       items += "<option value=\"" + item.Value + "\">" + item.Text + "</option>"; 
      }); 
      $("#User_Ward").html(items); 
     } 
    }); 
} 

и метод Post в моем контроллере:

[HttpPost] 
    public ActionResult Cities() 
    { 
     var cities = ILocaRepo.Cities; 
     return Json(new SelectList(cities,"CityID","CityName")); 
    } 
    [HttpPost] 
    public ActionResult Wards(string CityName) 
    { 
     var wards = ILocaRepo.ListWardByCityName(CityName); 
     return Json(new SelectList(wards, "WardID", "WardName")); 
    } 

По какой-то причине, источник 2 DDL имеет Value = x.CityName.ToString(), не имеет CityId (INT). В firebud, почему репсоном второго ddl всегда является []. Любое объяснение моей ошибки?

+0

Немного смущен, потому что в разметке у вас есть выпадающий список под названием «Город», но Int он JS, вы имеете в виду на «user_city». –

+0

Потому что в firebug я проверяю ddl и вижу, что идентификатор его 'User_City', имя' User.City'. – Luffy

ответ

1

В firebud, почему repsone второй DDL всегда []

Вероятно потому, что ListWardByCityName метод, который вы звоните возвращает пустой список. Это может произойти, если этот метод не находит соответствующую запись по имени города. Отлаживайте этот метод, чтобы понять, почему это происходит.

В качестве побочного примечания вы, кажется, используете какой-то $('#User_City') селектор, но у вашего раскрывающегося списка нет такого идентификатора. Убедитесь, что вы назначили правильный идентификатор к нему:

@Html.DropDownListFor(
    m => m.User.City,Model.City, 
    "-- Chọn thành phố --", 
    new { @class = "dropdown", id = "User_City" } 
) 
+0

Да, моя вина в 'ListWardByCityName'. Я редактирую его, и он отлично работает. Но могу ли я вернуть второй ddl в необязательную метку, такую ​​как '' - Chọn quận --', если первая находится на '- Chọn thành phố --'. И когда загрузка первой страницы, второе значение ddl является длинным списком элементы, как я могу очистить его до заполнения, зависит от первого ddl. – Luffy

+0

Вы можете удалить второй ddl, прежде чем начинать заполнять его значениями из вызова AJAX, типа this $ ('# id_of_your_second_ddl'). empty(); ' –

Смежные вопросы