在EditorFor中列出<model>没有正确递增

时间:2016-03-08 08:58:24

标签: c# jquery asp.net-mvc knockout.js enums

我有一个包含模型的视图,这个模型包含一个列表(另一个模型),这个列表在我的视图中用动态重复字段填充;

型号:

 public class CAOEntry
{
    public CAOEntry()
    {
        this.TimeEntries = new List<TimeEntry>() { new TimeEntry() };
    }
    public DateTime ValidFrom { get; set; }
    public DateTime ValidTo { get; set; }
    public List<TimeEntry> TimeEntries {get; set;}
}

我的视图(创建处理TimeEntry列表的部分)

@Html.EditorFor(model => model.TimeEntries)
        <button data-bind="click: addTimeEntry">Voeg tijdsvak toe</button>
        <button data-bind="click: removeTimeEntry">Verwijder laatste</button>:

data-bind“click:addTimeEntry”是一个jQuery / KnockoutJs脚本,用于添加新的时间条目。这些是从编辑器模板添加的。 在这个编辑器模板中,我得到了以下代码:

@Html.EnumDropDownListFor(model => model.DayOfWeekOrHoliday,"--Selecteer een dag--", new { htmlAttributes = new { @class = "form-control", data_bind = "value: DayOfWeekOrHoliday, namePath: true" } })

现在,当我有两个TimeEntries填写并单击save时,会发生以下情况; 有三个时间条目返回给我的控制器: 一个包含第一个填充的枚举值,其他字段为空。 其他两个不包含任何枚举值,但填充了其他字段。

调试视图时,我看到了以下问题;

TimeEntry 1: enum field;

id="TimeEntries_0__DayOfWeekOrHoliday" name="TimeEntries[0].DayOfWeekOrHoliday"

第二个字段的示例:

id="TimeEntries_1__TimeFrom" name="TimeEntries[1].TimeFrom" 

TimeEntry 2: Enum字段;

id="TimeEntries_0__DayOfWeekOrHoliday" name="TimeEntries[0].DayOfWeekOrHoliday"

第二个字段的示例:

id="TimeEntries_2__TimeFrom" name="TimeEntries[2].TimeFrom" 

因此,对于枚举值,Array不会增加。这是因为EditorFor帮助器中有一个枚举字段吗? 我无法弄清楚如何解决这个问题。 [编辑] TimeEntry类:

public class TimeEntry
{
    public int ID { get; set; }

    //1:Monday,2:Tuesday,3:Wednesday,4:Thursday,5:Friday,6:Saturday,7:Sunday,8:Any Holiday
    public enum Days {Maandag =1,Dinsdag =2, Woensdag=3,Donderdag = 4, Vrijdag= 5, Zaterdag=6, Zondag=7, Feestdag = 8}
    [Required]
    [Display(Name = "Dag")]
    [Range(1, int.MaxValue, ErrorMessage = "Selecteer een dag")]
    public Days DayOfWeekOrHoliday { get; set; }

    [Required]
    [Display(Name = "Start Tijdvak(uur:minuten)")]
    [StringLength(5, MinimumLength = 5)]
    [DataType(DataType.Time)]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:hh:mm}")]
    public string TimeFrom { get; set; }

    [Required]
    [Display(Name = "Eind Tijdvak(uur:minuten)")]
    [StringLength(5, MinimumLength = 5)]
    [DataType(DataType.Time)]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:hh:mm}")]
    public string TimeTo { get; set; }

    [Required]
    public decimal Premium { get; set; }

}

EditorFor:

function createViewModel() {

        var createTimeEntry = function () {
            return {
                DayOfWeekOrHoliday: ko.observable(),
                TimeFrom: ko.observable(),
                TimeTo: ko.observable(),
                Premium: ko.observable()
            };
        };

        var addTimeEntry = function () {
            TimeEntries.push(createTimeEntry());
        };

        var removeTimeEntry = function () {
            TimeEntries.pop();
        };

        var ValidFrom = ko.observable();
        var ValidTo = ko.observable();
        var TimeEntries = ko.observableArray([createTimeEntry()]);

        return {
            ValidFrom: ValidFrom,
            ValidTo: ValidTo,
            TimeEntries: TimeEntries,
            addTimeEntry: addTimeEntry,
            removeTimeEntry: removeTimeEntry
        };
    }

$(document).ready(function () {
        var viewModel = createViewModel();
        ko.applyBindings(viewModel);
    });
</script>

0 个答案:

没有答案