Jquery Developer
Jquery Developer

Reputation: 279

Avoiding foreach for @html.checkboxfor

I am developing an application using MVC. I had a requirement where I have to display checkbox for a list.

I was going through different posts for doing this, one of them is the use of avoiding foreach for looping and making use of @html.editorfor() as described in the answer by Darwin dimitrov here:

This answer works fabulously fine, but I have a clarification , it is:

  1. In the same view I have 2 requirements , the one with checkboxfor and the other one with radiobuttonfor So, If I am using

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

How do I write the (~/Views/Shared/EditorTemplates/RoleAccessViewModel.cshtml) to serve for checkboxfor for one requirement , and the other one for @radiobuttonfor .

Wont this approach be hardcoded which will always render the RoleAccessViewModel.cshtml whenever EditorFor(x => x.RoleAccess) is used?Please execuse me If I have used any technical terms wrong way,as I still a novice in mvc.

Upvotes: 5

Views: 661

Answers (2)

Chris Pratt
Chris Pratt

Reputation: 239430

You can also solve this by using the UIHint attribute on your property instead (or in addition to) relying on naming the template after your view model. Then you can create an alternate template to render the radio buttons and specify that:

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

EditorFor will then look for the template: Views\Shared\EditorTemplates\RadioList.cshtml

You could do the same for your checkbox list, as well, instead of relying on the view model. For example, [UIHint("CheckboxList")] and CheckboxList.cshtml. Then, you'd be able to apply these templates more broadly.

Upvotes: 1

chris
chris

Reputation: 2621

The EditorFor method has an overload that accepts a template name as argument. I think that solves your problem if I understand it correctly. See http://msdn.microsoft.com/en-us/library/ee407414%28v=vs.118%29.aspx

Upvotes: 2

Related Questions