I currently have an object Tag
defined as follows:
public class Tag
{
public string Name { get; set; }
}
Now, this is a collection property of a Model which I'm defining as:
public class MyModel
{
public string Name { get; set; }
public IList<Tag> Tags { get; set; }
}
In my view I have the following code:
@using (Html.BeginForm())
{
<div>
@Html.LabelFor(m => m.Name)
@Html.TextBoxFor(m => m.Name)
</div>
<div>
<!--
Here I'd like a collection of checkbox inputs, where the selected names
get passed back to my controller via the IList<Tag> collection
-->
</div>
<input type="submit" value="Submit" />
}
How do I return the selected items on my checkbox group (specified in comments) via the IList collection of my model?
This is similar to something i have done in a site im working on.
I used this extension @Html.CheckBoxListFor()
Hope this helps.
If you can add a bool IsChecked property to your Tag model then you can just use EditorFor (or CheckBoxFor) in a loop. The trick is to use a for loop with indexer (not foreach) such that you access the property via the views main model. Then the modelbinder will do the rest for you so your POST action will receive MyModel with its Tags IsChecked properties set to the correct states.
Models:
The View:
Use Editor Templates
For having the Checkbox, Add another Proeprty to your
Tag
classs to specify whether it is selected or not.Now from your
GET
Action, you can set a List of Tags in your Model'sTags
Property and sent it to the View.Now Let's create an Editor Template, Go to The
View/YourControllerName
and Create a Folder calledEditorTemaplates
and Create a new View there with the same name as of the Property type (Tag.cshtml
).Add this content to the new editor template now.
Now in your Main View, Call your Editor template using the
EditorFor
Html Helper method.Now when You Post the Form, Your Model will have the Tags Collection where the Selected Checkboxes will be having a True value for the
IsSelected
Property.Like this