【问题标题】:Some long parameters in a Complex Type are always zero in POST WEB API复杂类型中的一些长参数在 POST WEB API 中始终为零
【发布时间】:2014-04-17 12:55:51
【问题描述】:

我的 DTO 是

public class create_invoice_request
{
    [DataMember]
    public long termID { get; set; }
    [DataMember]
    public long admissionBatchID { get; set; }
    [DataMember]
    public long programID { get; set; }
    [DataMember]
    public long admissionID { get; set; }
    [DataMember]
    public long bankAccountID { get; set; }
    [DataMember]
    public long companyID { get; set; }
    [DataMember]
    public long invoiceTypeID { get; set; }
    [DataMember]
    public decimal totalAmount { get; set; }
    [DataMember]
    public List<invoiceDiscountDetail> invoiceDisDetList { get; set; }
    [DataMember]
    public DateTime invoiceDate { get; set; }
    [DataMember]
    public DateTime invoiceDueDate { get; set; }
    [DataMember]
    public long createdBy { get; set; }
    [DataMember]
    public DateTime createdAt { get; private set; }
    [DataMember]
    public long? modifiedBy { get; set; }
    [DataMember]
    public DateTime? modifiedAt { get; private set; }
    [DataMember]
    public int[] stdIDs { get; set; }
    [DataMember]
    public List<feeSettingDetail> feeSettingDetailList { get; set; }
}

public class invoiceDiscountDetail
{
    [DataMember]
    public long invoiceDiscountDetailID { get; set; }
    [DataMember]
    public long invoiceID { get; set; }
    [DataMember]
    public long feeDiscountSettingDetailID { get; set; }
    [DataMember]
    public long feeTypeID { get; set; }
    [DataMember]
    public long feeDiscountTypeID { get; set; }
    [DataMember]
    public decimal discountAmount { get; set; }
}

public class feeSettingDetail
{
    [DataMember]
    public long feeSettingDetailID { get; set; }
    [DataMember]
    public decimal amount { get; set; }
}

JS 是

var $id = [$('#ddlStudent').val()];
var feeSettingDetailList = [];

$('#feeDetailTable > tbody > tr').each(function (i, el) {
    var feeSettingDetail = {};

    feeSettingDetail["feeSettingDetailID"] = $(this).find("input[id^=txtAmount]").attr('id').substring(9);
    feeSettingDetail["amount"] = $(this).find("input[id^=txtAmount]").autoNumeric('get');

    feeSettingDetailList.push(feeSettingDetail);
});

var invoiceDisDetList = [];

$('#feeDiscountDetailTable > tbody > tr').each(function (i, el) {
    var invoiceDisDet = {};

    invoiceDisDet["feeDiscountSettingDetailID"] = $(this).find("input[id^=txtDiscountAmount]").attr('id').substring(17);
    invoiceDisDet["feeTypeID"] = $(this).find("select[id*=ddlDisFeeType]").val();
    invoiceDisDet["feeDiscountTypeID"] = $(this).find("select[id*=ddlFeeDiscountType]").val();
    invoiceDisDet["discountAmount"] = $(this).find("input[id^=txtDiscountAmount]").val();

    invoiceDisDetList.push(invoiceDisDet);
});

var source = {
    'termID': $('#ddlTerm').val(),
    'programID': $('#ddlProgram').val(),
    'admissionBatchID': $('#ddlBatch').val(),
    'ledgerBalance': $("#txtFeeBalance").val(),
    'bankAccountID': $('#ddlAccountNumber').val(),
    'invoiceTypeID': 1,
    'totalAmount': $("#lblTotal").html(),
    'invoiceDate': $("#txtInvoiceDate").val(),
    'invoiceDueDate': $("#txtDueDate").val(),
    'stdIDs': $id,
    'invoiceDisDetList': invoiceDisDetList,
    'feeSettingDetailList': feeSettingDetailList
};

我的控制器是

[HttpPost]
[ActionName("InsertInvoice")]
public HttpResponseMessage InsertInvoice(create_invoice_request req)
{

      //Controller body 
      //invoiceDiscountDetail some parameters are alwyas zero
      //  [DataMember]
      //  public long feeDiscountSettingDetailID { get; set; }
      //  [DataMember]
      //  public long feeTypeID { get; set; }
      //  [DataMember]
      //  public long feeDiscountTypeID { get; set; } 
}

【问题讨论】:

  • 更多细节在这里会有所帮助。哪些参数是空的?你如何确定它们是空的?服务器上的断点?在浏览器开发工具中进行检查?
  • 在所有对象中的 invoiceDiscountDetail 列表中,feeTypeID 和 feeDiscountTypeID 始终为零

标签: jquery asp.net asp.net-web-api


【解决方案1】:

我发现这个部分的数字有多余的空格

invoiceDisDet["feeTypeID"] = $(this).find("select[id*=ddlDisFeeType]").val();
invoiceDisDet["feeDiscountTypeID"] = $(this).find("select[id*=ddlFeeDiscountType]").val();
invoiceDisDet["discountAmount"] = $(this).find("input[id^=txtDiscountAmount]").val();

所以我只使用了 $.trim($(this).find("select[id*=ddlDisFeeType]").val()); 问题已解决

我分享这个是为了帮助别人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    • 2015-08-06
    • 2021-01-26
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 2017-06-01
    相关资源
    最近更新 更多