Asp.net mvc 模板回发的复选框列表MVC编辑器
我继承了一些不完整的代码。开发人员使用editorfor模板创建他的复选框列表。问题是它没有绑定回模型,因此我可以将数据返回到服务器端。 有没有人举过一个例子,说明如何使用editorfortemplate创建复选框列表,并将数据发送回绑定到模型? 下面是editortemplate内容 名为ServiceTypeViewModel.cshtml的编辑器模板Asp.net mvc 模板回发的复选框列表MVC编辑器,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,我继承了一些不完整的代码。开发人员使用editorfor模板创建他的复选框列表。问题是它没有绑定回模型,因此我可以将数据返回到服务器端。 有没有人举过一个例子,说明如何使用editorfortemplate创建复选框列表,并将数据发送回绑定到模型? 下面是editortemplate内容 名为ServiceTypeViewModel.cshtml的编辑器模板 @model List<ViewModels.ServiceTypeViewModel> <table>
@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>
主模型中模板定义的编辑器
[UIHint("ServiceTypeViewModel")]
public List<ServiceTypeViewModel> ProvidedServices { get; set; }
如何将其显示为列表
我让它在模板中呈现,如上图所示,但回发将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>
@型号列表
@{int k=0;int columns=2;}
@对于(int i=0;i<(Model.Count/columns+(Model.Count%columns==0?0:1));i++)
{
@对于(int j=0;j m[k].ServiceTypeClass);
@Html.HiddenFor(m=>m[k].ServiceType);
@Html.CheckBoxFor(m=>m[k]。选中);
@DisplayFor(m=>m[k].Name);
k++;
}
}
}
将ServiceTypeViewModel.cshtml
更改为
@model ViewModels.ServiceTypeViewModel
<tr>
<td>
@Html.HiddenFor(m > m.ServiceTypeClass)
@Html.HiddenFor(m > m.ServiceType)
@Html.CheckBoxFor(m > m.Selected)
@Html.DisplayFor(m => m.Name)
</td>
</tr>
在主要观点中
<div id="container">
@Html.EditorFor(x => x.ProvidedServices)
</div>
<table>
<tr>
@for(int i = 0; i < Model.ProvidedServices.Count; i++)
{
<td>
@Html.HiddenFor(m => m.ProvidedServices[i].ServiceTypeClass)
@Html.HiddenFor(m => m.ProvidedServices[i].ServiceType)
@Html.CheckBoxFor(m => m.ProvidedServices[i].Selected)
@Html.LabelFor(m => m.ProvidedServices[i].Selected, Model.ProvidedServices[i].Name)
</td>
if((i + 1) % 2 == 0)
{
@:</tr><tr>
}
}
</tr>
</table>
这将生成一个2列,如中所示
或者,如果您确实想使用表(因为表用于表格数据,所以不太合适),则不能使用EditorTempate
。相反,您需要在主视图中为循环使用
<div id="container">
@Html.EditorFor(x => x.ProvidedServices)
</div>
<table>
<tr>
@for(int i = 0; i < Model.ProvidedServices.Count; i++)
{
<td>
@Html.HiddenFor(m => m.ProvidedServices[i].ServiceTypeClass)
@Html.HiddenFor(m => m.ProvidedServices[i].ServiceType)
@Html.CheckBoxFor(m => m.ProvidedServices[i].Selected)
@Html.LabelFor(m => m.ProvidedServices[i].Selected, Model.ProvidedServices[i].Name)
</td>
if((i + 1) % 2 == 0)
{
@:</tr><tr>
}
}
</tr>
</table>
@对于(int i=0;im.ProvidedServices[i].ServiceTypeClass)
@Html.HiddenFor(m=>m.ProvidedServices[i].ServiceType)
@Html.CheckBoxFor(m=>m.ProvidedServices[i]。选中)
@Html.LabelFor(m=>m.ProvidedServices[i]。选中,Model.ProvidedServices[i]。名称)
如果((i+1)%2==0)
{
@:
}
}
旁注:为属性Name
包含一个隐藏输入是没有意义的。它是一个只读属性(无setter),因此无论如何都不会被绑定。我更新了这个问题。你能帮我把它渲染成如图所示的列表吗?当然可以,但是你不能用EditorTemplate
。您需要在视图中使用for
循环,以便每行生成2列。现在没有时间(很晚了),但会在早上更新答案。但是为了让您开始,请看一看实际上您可以使用EditorTemplate
,但是使用
元素而不是
,并设置样式(例如显示:内联块;浮点;左;宽度:40%;
)我让它在编辑器模板中呈现,但返回时ProvidedServices的列表为空。我将更新问题
#container div {
width: 50%;
display: inline-block;
float: left;
}
<table>
<tr>
@for(int i = 0; i < Model.ProvidedServices.Count; i++)
{
<td>
@Html.HiddenFor(m => m.ProvidedServices[i].ServiceTypeClass)
@Html.HiddenFor(m => m.ProvidedServices[i].ServiceType)
@Html.CheckBoxFor(m => m.ProvidedServices[i].Selected)
@Html.LabelFor(m => m.ProvidedServices[i].Selected, Model.ProvidedServices[i].Name)
</td>
if((i + 1) % 2 == 0)
{
@:</tr><tr>
}
}
</tr>
</table>