【问题标题】:How to read object back from dropdown如何从下拉列表中读取对象
【发布时间】:2016-02-18 03:47:28
【问题描述】:

我正在使用 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 调用:

$.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);
});

警报返回未定义...

【问题讨论】:

  • alert(SubscriptionLookUp) 会给你价值
  • @EhsanSajjad 感谢您的评论,但这将返回整个对象。我正在尝试从该对象读取属性
  • 你必须自己构建你的对象
  • SubscriptionLookUp.SubscriptionType = $("#cboAvailableSubscriptions").val()
  • @EhsanSajjad 谢谢,但这没有用。只是为了确认我添加的“项目”是类对象。

标签: javascript c# jquery asp.net


【解决方案1】:

$.val() 使用Object.prototype.toString.call(value),它将您的item 转换为字符串[Object object](您可以通过查看生成的html 的源代码来看到这一点)。因此,当尝试读取属性 SubscriptionType 时,JavaScript 引用的是 String.prototype,而不是您的 item - 因此是 undefined

只需对您的代码稍作改动,您就可以使用JSON.stringifyJSON.parse

Writer

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

Reader

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

您可能想查看$.data(),这似乎是适合这项工作的工具。

【讨论】:

    【解决方案2】:

    您可以使用data() 代替 val():

    $("#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);
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-28
      • 2017-05-06
      • 2016-06-30
      相关资源
      最近更新 更多