【发布时间】:2015-11-06 06:12:56
【问题描述】:
我继承了一些不完整的代码。开发人员使用模板编辑器来创建他的复选框列表。问题是它没有绑定回模型,因此我可以将数据返回到服务器端。 任何人都有一个关于如何将 editorfortemplate 用于复选框列表并将数据发送回绑定到模型的示例? 以下是编辑器模板内容。
EDITOR TEMPLATE 称为 ServiceTypeViewModel.cshtml
@model List<ViewModels.ServiceTypeViewModel>
<table>
@{int k = 0; int columns = 2;}
@for (int i = 0; i < (Model.Count / columns + (Model.Count % columns == 0 ? 0 : 1)); i++)
{
<tr>
@for(int j = 0; j<columns; j++){
<td>
@if (k<Model.Count) {
<input name="ProvidedServices[@(k)].Name" id="ProvidedServices__@(k)__Name" type="hidden" value="@Model[k].Name">
<input name="ProvidedServices[@(k)].Selected" class="CB" id="ProvidedServices__@(k)__Selected" type="checkbox" value="true">
<input name="ProvidedServices[@(k)].Selected" type="hidden" value="false">
<input name="ProvidedServices[@(k)].ServiceTypeClass" id="ProvidedServices__@(k)__ServiceTypeClass" type="hidden" value="@Model[k].ServiceTypeClass">
<input name="ProvidedServices[@(k)].ServiceType" id="ProvidedServices__@(k)__ServiceType" type="hidden" value="@Model[k].ServiceType">
@Html.DisplayFor(m=>Model[k].Name)
k++;
}
</td>
}
</tr>
}
</table>
模型如下
public class ServiceTypeViewModel
{
public string ServiceTypeClass { get; set; }
public string ServiceType { get; set; }
public bool Selected { get; set; }
public string Name { get { return ServiceTypeClass + " " + ServiceType; } }
}
}
主模型中的EditorFor模板定义。
[UIHint("ServiceTypeViewModel")]
public List<ServiceTypeViewModel> ProvidedServices { get; set; }
Index.cshtml
@Html.LabelFor(x => x.ProvidedServices)
@Html.EditorFor(x => x.ProvidedServices)
如何让它显示为列表?
我让它像上图一样在模板中呈现,但回发将 providerservices 返回为 null。下面的代码呈现了两列复选框。
@model List<ViewModels.ServiceTypeViewModel>
<table>
@{int k = 0; int columns = 2;}
@for (int i = 0; i < (Model.Count / columns + (Model.Count % columns == 0 ? 0 : 1)); i++)
{
<tr>
@for(int j = 0; j<columns; j++){
<td>
@if (k<Model.Count) {
@Html.HiddenFor(m => m[k].Name);
@Html.HiddenFor(m => m[k].ServiceTypeClass);
@Html.HiddenFor(m => m[k].ServiceType);
@Html.CheckBoxFor(m => m[k].Selected);
@Html.DisplayFor(m => m[k].Name);
k++;
}
</td>
}
</tr>
}
</table>
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4