ASP NET MVC 4并排渲染复选框

时间:2014-05-30 16:19:04

标签: c# asp.net-mvc razor checkbox

我有一个简单的问题。我正在使用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应用于编辑器模板,现在需要处理边距。

checkboxes

由于

1 个答案:

答案 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元素就可以在同一行的单个块中容纳。