2016-02-17 6 views
1

Я использую JavaScript.Как читать объект из раскрывающегося списка

Я делаю api-вызов, чтобы получить список объектов класса (asp.net mvc C#).

Я перечисляю этот список в JavaScript и устанавливаю и добавляю элементы в раскрывающееся меню.

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

Это моя модель:

public class SubscriptionLookUp 
{ 
    public string SubscriptionType { get; set; } 
    public int SubscriptionTypeId { get; set; } 
    public double UnitCost { get; set; } 
    public string ErrorMessage { get; set; } 
} 

Это мой Аякса вызов:

$.ajax({ 
    url: "https://mydomain/SubscriptionLookUp?currentSubscription" 
    type: "GET", 
    crossDomain: true, 
    dataType: 'jsonp', 
    jsonp: 'callback', 
    success: function (data) { 
      $("#cboAvailableSubscriptions").empty(); 
     $("#cboAvailableSubscriptions").append($("<option></option>").val('').html('Please Select')); 
     $.each(data, function (key, item) { 

      if (item.ErrorMessage !== '' && item.ErrorMessage!==null) { 
       $('#divError').html('Server Error'); 
       return; 
      } 
      $("#cboAvailableSubscriptions").append($("<option></option>").val(item).html(item.SubscriptionType)); 
     })         }, 
    error: function (jqXHR, textStatus, errorThrown) { 
      $("#divError").html('Server Error'); 
    } 
}); 

который заполняется только штрафом, и это мой последний бит читать дэ объект обратно:

$('#divChange').click(function() { 

    var SubscriptionLookUp = { 
     SubscriptionType: '', 
     SubscriptionTypeId: '', 
     UnitCost: '', 
    }; 
    SubscriptionLookUp = $("#cboAvailableSubscriptions").val(); 

    alert(SubscriptionLookUp.SubscriptionType); 
}); 

Предупреждение возвращается не определено ...

+0

'' предупреждение (SubscriptionLookUp) '' даст вам значение –

+0

@EhsanSajjad спасибо за ваш комментарий, но это вернет весь объект. Я пытаюсь прочитать свойство из этого объекта –

+0

вам нужно построить свой объект самостоятельно –

ответ

2

$.val() использует Object.prototype.toString.call(value), который преобразует ваш item в строку [Object object] (вы можете увидеть это, просмотрев источник сгенерированного html). Итак, при попытке прочитать свойство SubscriptionType, JavaScript ссылается на String.prototype, а не на ваш item -поэтому undefined.

С небольшим количеством изменений в код, вы можете использовать JSON.stringify и JSON.parse:

Writer

$("#cboAvailableSubscriptions").append(
    $("<option></option>").val(JSON.stringify(item)) 
         .html(item.SubscriptionType) 
); 

Reader

SubscriptionLookUp = JSON.parse($("#cboAvailableSubscriptions").val()); 

Вы можете посмотреть в $.data(), кажется, право инструмент для работы.

+0

хороший. Я забыл о JSON.Parse. спасибо –

1

Вы можете использовать data() вместо Валу():

$("#cboAvailableSubscriptions").append($("<option></option>").data("itemKey", item).html(item.SubscriptionType)); 

И получить его:

$('#divChange').click(function() { 

    var SubscriptionLookUp = { 
     SubscriptionType: '', 
     SubscriptionTypeId: '', 
     UnitCost: '', 
    }; 
    SubscriptionLookUp = $("#cboAvailableSubscriptions").find(":selected").data("itemKey"); 

    alert(SubscriptionLookUp.SubscriptionType); 
}); 
+0

большое спасибо –

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