避免@html.checkboxfor的foreach

时间:2014-08-05 14:51:49

标签: asp.net-mvc asp.net-mvc-4

我正在使用MVC开发应用程序。我有一个要求,我必须显示列表的复选框。

我正在经历不同的帖子,其中一个是使用避免foreach循环和使用@html.editorfor(),如Darwin dimitrov here的答案所述:

这个答案非常好,但我有一个澄清,那就是:

  1. 在同一视图中,我有2个要求,一个是checkboxfor,另一个是radiobuttonfor 所以,如果我正在使用

    <div>@Html.EditorFor(x => x.RoleAccess)</div>

  2. 如何编写(〜/ Views / Shared / EditorTemplates / RoleAccessViewModel.cshtml)来为一个需求提供复选框,为@radiobuttonfor提供另一个。

    这种方法难道不是硬编码的,每当使用EditorFor(x => x.RoleAccess)时总会呈现RoleAccessViewModel.cshtml吗?请执行我如果我使用了任何技术术语错误的方式,因为我仍然是mvc的新手。

2 个答案:

答案 0 :(得分:2)

EditorFor方法有一个重载,接受模板名称作为参数。如果我理解正确,我想这可以解决你的问题。见http://msdn.microsoft.com/en-us/library/ee407414%28v=vs.118%29.aspx

答案 1 :(得分:1)

您也可以使用属性上的UIHint属性代替(或除此之外)依赖于在视图模型后命名模板来解决此问题。然后,您可以创建一个替代模板来呈现单选按钮并指定:

[UIHint("RadioList")]
public List<Something> MyRadioButtonList { get; set; }
然后

EditorFor会找到模板:Views\Shared\EditorTemplates\RadioList.cshtml

您也可以对复选框列表执行相同操作,而不是依赖于视图模型。例如,[UIHint("CheckboxList")]CheckboxList.cshtml。然后,您可以更广泛地应用这些模板。