淘汰3级映射,第3级没有变化

时间:2017-10-26 21:57:22

标签: asp.net-mvc knockout.js knockout-3.0

我是KnockoutJS的新手,我正在尝试为主 - 细节ASP.NET MVC视图创建一个3级模型绑定。

这是我试图在以下方面实现此行为的屏幕:

enter image description here 我有以下ViewModel设计

  public class CreateReservationViewModel
{

    public string Title { get; set; }
    public String LogoPath { get; set; }
    public string StartDate { get; set; }
    public string EndDate { get; set; }
    public string StartTime { get; set; }
    public string EndTime { get; set; }
    public int TimeSpan { get; set; }
    public int MinPersons { get; set; }
    public int MaxPersons { get; set; }
    public List<ReservationOptionViewModel> ReservationOptions { get; set; }
    public string MessageToClient { get; set; }
    public CreateReservationViewModel()
    {
        ReservationOptions = new List<ReservationOptionViewModel>();
    }
}

 public class ReservationOptionViewModel
{
    public int Id { get; set; }
    public string Title { get; set; }
    public int TypeId { get; set; }
    public string TypeDescription { get; set; }
    public string Info { get; set; }
    public List<ValuesViewModel> ReservationOptionValues { get; set; }
    public ReservationOptionViewModel()
    {
        ReservationOptionValues = new List<ValuesViewModel>();
    }
}

public class ValuesViewModel
{
    public int Id { get; set; }
    public string ValueTitle { get; set; } // this value i cant seem to get to bind user input always defaults to whatever i set it in knockout 
}

这是我的.js和.html https://jsfiddle.net/camLpdty/

虽然我能够成功绑定第一级和第二级,但是第三级绑定总是选择默认值,即:[({Id:0,ValueTitle:&#34;这是只读的,不能更改&#34;} )]}

enter image description here

其他一切似乎都有效......

1 个答案:

答案 0 :(得分:0)

从你的jsfiddle看起来,Values列的绑定上下文有点偏。 data-bind="value: Values.ValueTitle" - 这里,Values是一个数组,但您正在尝试将单个输入框绑定到它。它不知道要使用哪个元素的ValueTitle,因此它可能不受任何限制。您需要使用“foreach”或更改显示该信息的方式

作为快速测试,您可以尝试更改最后一个绑定:

<td>
    <input class="form-control input-sm" 
        data-bind="value: ReservationOptionValues.ValueTitle" />
</td> 

<td data-bind="foreach: ReservationOptionValues">
    <input class="form-control input-sm" data-bind="value: ValueTitle" />
</td>

这将为Values数组中的每个元素创建一个输入框,因此您可能不希望像这样离开它,但它应该突出显示敲除上下文问题