2012-02-08 76 views
2

我有我的局部視圖:MVC 3複選框未能在模型返回值

@foreach (var checkbox in Model.TimeLimit) 
{ 
    <div class="editor-label"> 
    @Html.Label(checkbox.Name) 
    @Html.Hidden(checkbox.Id) 
    @Html.CheckBoxFor(c=>checkbox.IsChecked) 
    </div> 
} 

我有一個ParentViewModel其中包含:

public IEnumerable<URLTimeLimitViewModel> TimeLimit { get; set; } 

和URlTimelimitViewmodel包含:

public string Name { get; set; } 
public int Id { get; set; } 
public bool IsChecked { get; set; } 

當我調用提交按鈕時,ParentViewModel中的Timelimit返回null,爲什麼?

回答

1

你需要改變你的循環 - 模型綁定無法弄清楚如何張貼的值綁定到:

@for (var i = 0; i < Model.TimeLimit.Count; i++) 
{ 
    <div class="editor-label"> 
    @Html.Label(Model.TimeLimit[i].Name) 
    @Html.Hidden(Model.TimeLimit[i].Id) 
    @Html.CheckBoxFor(c=>Model.TimeLimit[i].IsChecked) 
    </div> 
} 

您還需要您的TimeLimit財產申報作爲比一個IEnumerable其他的東西,我倒是推薦一個泛型列表(LINQs ToList方法是很方便!):

public List<URlTimelimitViewModel> TimeLimit { get; set; } 
3

更好的辦法是EditorTemplate爲URLTimeLimitViewModel

它將看起來像這樣

@model URlTimelimitViewModel 
<div class="editor-label"> 
    @Html.Label(Model.Name) 
    @Html.Hidden(Model.Id) 
    @Html.CheckBoxFor(c=>Model.IsChecked) 
</div> 

和寫入以下代替 「的foreach」

@Html.EditorFor(x=> x.TimeLimit) 
代碼