我有一个简单的问题。我正在使用SimpleMembershipProvider(它本身就很尴尬)为n:m关系(即用户/角色)实现CRUD。 我创建了一个视图类:
public class AssignedRoleData
{
public string RoleName { get; set; }
public bool Assigned { get; set; }
}
我将此添加到我的用户类:
public List<AssignedRoleData> AssignedRoles { get; set; }
这是我的AssignedRoleData.cshtml:
@model NfseEasyWeb.Models.AssignedRoleData
@Html.HiddenFor(model => model.RoleName)
@Html.LabelFor(model => model.Assigned, Model.RoleName)
@Html.EditorFor(model => model.Assigned)
我希望它们出现在水平线上。
<table>
<tr>
@foreach (var item in Model.AssignedRoles) {
<td>
<div class="editor-field">
@Html.Editor What goes here?
</div>
</td>
}
</tr>
</table>
我知道我可以使用
@Html.EditorFor(model => model.AssignedRoles)
框架会检测它是一个集合并根据需要渲染尽可能多的AssignedRoleData.cshtml,但它们以纯HTML格式显示,垂直,我希望它们出现在水平线上。
这就是我想要的。它是否将CSS应用于编辑器模板,现在需要处理边距。
由于
答案 0 :(得分:0)
在这种情况下的方法是为单个实体创建模板,并在视图中使用EditorFor作为集合,如下所示:
@Html.EditorFor(model => model.AssignedRoles)
MVC框架将其视为一个集合,并根据需要呈现尽可能多的模板(MVC can't override EditorTemplate name when used in EditorFor for child object)。这应该是首选方式,而不是在元素中调用for循环,或者使用Viewbag(我通过经验和阅读来说,最好不要偏离模式)。
作为渲染部分,为了使复选框并排显示,可以使用CSS:
<div class="checkbox-editor-field">
@Html.HiddenFor(model => model.RoleName)
@Html.LabelFor(model => model.Assigned, Model.RoleName)
@Html.EditorFor(model => model.Assigned)
</div>
为此创建一个CSS类:
.checkbox-editor-field {
display:inline-block;
}
这样div元素就可以在同一行的单个块中容纳。