2014-04-29 2 views
0

Приветствуется от относительного новичка.MVC/JSON Каскадирование раскрывающегося списка Дисплеи [объект объекта]

Я пытаюсь заполнить выпадающий список (Bill-To Address) на основе выбранного значения в другом раскрывающемся списке (Агентство). В зависимом выпадающем списке отображается [object Object], когда в первом выпадающем списке выбрано значение. Мне потребуется идентификатор из второго раскрывающегося списка, чтобы обновить запись базы данных по дороге.

Я считаю, что мне что-то не хватает действительно базовый/глупый здесь, но я почти не сдался. Я искал похожие проблемы, но еще не нашел ничего, что разрешило мою проблему.

Многие, большое спасибо заранее!

Вот соответствующие фрагменты кода:

CreatePurchaseOrderViewModel.cs

// Agency dropdown list 
[Required(ErrorMessage = "An agency must be selected.")] 
public int AgencyID { get; set; } 
public List<SelectListItem> AgencyList { get; set; } 

// Agency bill-to address dropdown list 
[Required(ErrorMessage = "A bill-to address must be selected.")] 
public int BillToAddressID { get; set; } 
public List<SelectListItem> BillToAddressList { get; set; } 

PurchaseOrderService.cs

// Query vPurchaseOrderAddresses view to fetch 
// a bill-to address for a given Id 
public List<SelectListItem> GetBillToAddressByAgency(int Id) 
{ 
    using (MyEntities db = new MyEntities()) 
    { 
     var billtoAddressQuery = db.vPurchaseOrderAddresses.ToList() 
      .Where(b => b.PartyID == Id) 
      .Where(b => b.PCMPT == 2) // (2) = bill-to address 
      .Select(b => new SelectListItem 
      { 
       Value = b.PartyID.ToString(), 
       Text = b.Address 
      }); 

     // Sort list ascending 
     billtoAddressQuery = billtoAddressQuery.OrderBy(d => d.Text); 

     return billtoAddressQuery.ToList(); 
    } 
} 

PurchaseOrderController.cs

[HttpPost] 
public ActionResult GetBillToAddressByAgency(string selectedValue) 
{ 
    // Create instance of PurchaseOrderService class 
    PurchaseOrderService PO = new PurchaseOrderService(); 

    // Create a list to hold bill-to addresses from database 
    List<SelectListItem> BillToAddressList = new List<SelectListItem>(); 

    // Populate bill-to address dropdown list by calling 
    // the GetBillToAddressByAgency method of the PurchaseOrderService class. 
    int i; 
    if (Int32.TryParse(selectedValue, out i)) 
    { 
     BillToAddressList = PO.GetBillToAddressByAgency(Convert.ToInt32(selectedValue)); 
    } 

    return Json(new { billtoAddressList = BillToAddressList }); 

} 

И, наконец, вид: Create.cshtml

@*-- Agency dropdown list --*@ 
<div class="form-group"> 
    <label class="control-label col-md-2" for="AgencyID">Agency *</label> 
    <div class="col-md-10"> 
     @Html.DropDownListFor(model => model.AgencyID, Model.AgencyList, "-- Select Agency --") 
     @Html.ValidationMessageFor(model => model.AgencyID) 
    </div> 
</div> 

<div class="form-group"> 
    <label class="control-label col-md-2" for="BillToAddressID">Bill-To Address *</label> 
    <div class="col-md-10"> 
     @Html.DropDownListFor(model => model.BillToAddressID, Model.BillToAddressList, "-- Select Bill-To Address --") 
     @Html.ValidationMessageFor(model => model.BillToAddressID) 
    </div> 
</div> 

<script type="text/javascript"> 
    $("#AgencyID").change(function() { 
     var selectedValue = $(this).val(); 
     $.ajax({ 
      url: '@Url.Action("GetBillToAddressByAgency", "PurchaseOrder")', 
      type: 'POST', 
      data: { "selectedValue": selectedValue }, 
      dataType: 'json', 
      success: function (response) { 
       var items = ""; 
       $.each(response.billtoAddressList, function (i, item) { 
        items += "<option value=\"" + item + "\">" + item + "</option>"; 
       }); 
       $("#BillToAddressID").html(items); 
      }, 
      error: function (error) { 
      } 
     }); 
    }); 
</script> 

ответ

0

Замените эту строку items += "<option value=\"" + item + "\">" + item + "</option>";

По items += "<option value=\"" + item.Value + "\">" + item.Text + "</option>";

Что касается вашего кода. Поскольку вы можете получить объект, который хорош, но вам нужно получить доступ к свойствам. Надеюсь, это вам поможет.

+0

Bingo !!! Это исправило это ... Большое спасибо! – NVFlyAngler