【问题标题】:MVC Posted array of objects property is null due to field, not property [duplicate]MVC发布的对象属性数组由于字段而不是属性为空[重复]
【发布时间】:2017-03-03 07:19:48
【问题描述】:

昨晚,我创建了一个包含对象数组字段的模型,其中包含所需的属性。模型绑定在 GET 请求下正常工作,但是当它回发时,一切都回到模型中,不包括这些数组的字段。 最初,我检查了语法,向该对象添加了 ID,但它们都不起作用。 型号是:

    public class RateEditVM
{
    [Required(ErrorMessage = "IDF boş geçilemez!")]
    public int? FK_ITH_IDFID { get; set; }

    [Required(ErrorMessage = "Mal Bedeli boş geçilemez!")]
    public decimal? GoodsPrice { get; set; }

    [Required(ErrorMessage = "İlk kur boş geçilemez!")]
    public decimal? GGBRate { get; set; }

    [Required(ErrorMessage = "Mal Bedeli (TL) boş geçilemez!")]
    public decimal? GoodsPriceTL { get; set; }

    public RateValueHolder[] ShippingExpenseValues ;
    public RateValueHolder[] InsuranceExpenseValues;
    public RateValueHolder[] BankExpenseValues ;
    public RateValueHolder[] CustomsExpenseValues;
    public RateValueHolder[] LocalExpenseValues;

    [Required(ErrorMessage = "Diğer Masraflar boş geçilemez!")]
    public decimal? OtherExpense { get; set; }

    [Required(ErrorMessage = "Toplam Masraflar boş geçilemez!")]
    public decimal? TotalExpense { get; set; }

    [Required(ErrorMessage = "Toplam Tutar boş geçilemez!")]
    public decimal? Total { get; set; }

    [Required(ErrorMessage = "Son Kur boş geçilemez!")]
    public decimal? RateCalculated { get; set; }
}

这些对象是 ValueHolders:

    public class RateValueHolder
{
    [Required(ErrorMessage = "Boş geçilemez!")]
    public decimal? Value { get; set; }

    public int ID { get; set; }
    public string Description { get; set; }
}

【问题讨论】:

    标签: arrays asp.net-mvc http-post model-binding


    【解决方案1】:

    答案很尴尬。当我将字段更改为属性时,一切正常:

        public RateValueHolder[] ShippingExpenseValues { get; set; }
        public RateValueHolder[] InsuranceExpenseValues { get; set; }
        public RateValueHolder[] BankExpenseValues { get; set; }
        public RateValueHolder[] CustomsExpenseValues { get; set; }
        public RateValueHolder[] LocalExpenseValues { get; set; }
    

    我认为,这是 MVC 中默认 ModelBinder 的一个错误。如果 ModelBinder 只查看属性,则当该模型类具有该字段而不是属性 IMO 时,它应该引发错误。因为,在我看来,我将这些字段用作谓词,以便 MVC 知道我绑定了什么。

    <fieldset class="col-xs-12">
    <legend>Nakliye Masrafları</legend>
    @for (var i = 0; i < Model.ShippingExpenseValues.Length; i++)
    {
        @Html.EditorFor(e => e.ShippingExpenseValues[i]);
    }
    </fieldset>
    

    【讨论】:

    • 这不是错误。它的设计。
    • 所以我必须自己找到它。在我看来,这是一个糟糕的设计。如果我是设计师,我可能会抛出一个异常说“你的模型有 {0} 字段,但它应该是绑定到视图的属性”
    • 写你自己的自定义ModelBinder(你可以做任何你想做的事)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 2022-01-23
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    相关资源
    最近更新 更多