it is easy:
1. create a checkbox class with row id and bool value.
2. put a check list in the controller method with some name.
3. Create 2 fields dynamically in your view, but make sure you match the razor motor naming system.
to create a dynamic list of flags, you need to understand how the shaving engine works, let's say you have this code
in the head of the view, you include the following model:
@model MyProject.Site.Models.MyWebModel
this model has an installation class that has a bool inside like this:
public class MyWebModel { public HighchartsSettingModel Settings { get; set; } } public class HighchartsSettingModel { public bool JoinSameType{ get; set; } }
and in the view you have:
@Html.CheckBoxFor(x => x.Settings.JoinSameType)
In short, this creates the following html code:
<input data-val="true" data-val-required="The JoinSameType field is required." id="Settings_JoinSameType" name="Settings.JoinSameType" type="checkbox" value="true" /> <input name="Settings.JoinSameType" type="hidden" value="false" />
so good for CheckBoxFor that is part of the framework, how do we work with arrays?
so now all we need to do is understand how to work with the list in the controller method, let's say you have this class:
public class Checkbox{ public string Id { get; set; } public bool Value { get; set; } }
and in the controller you have this:
public ActionResult SensorSearch(List<Checkbox> selectedSensors, string search, string subSearch, string page, string back)
and the view will look like this:
@{ int counter = 0; string id_name, id_id, value_id, value_name; } @foreach (var item in Model.SensorList) { id_id = "selectedSensors_" + counter + "__Value"; id_name = "selectedSensors[" + counter + "].Value"; value_id = "selectedSensors_" + counter + "__Id"; value_name = "selectedSensors[" + counter + "].Id"; counter++; <li><a href="#" style="padding-top: 0px;padding-bottom: 0px;padding-right: 42px;padding-left: 0px;"> <label style="border-top-width: 0px;margin-top: 0px;border-bottom-width: 0px;margin-bottom: 0px;border-left-width: 0px;border-right-width: 0px;" data-corners="false"> <fieldset data-role="controlgroup" > <input id="@id_id" name="@id_name" type="checkbox" value="true" /> <input id="@value_id" name="@value_name" type="hidden" value="@item.Key" /> <label for="@id_id" style="border-top-width: 0px;margin-top: 0px;border-bottom-width: 0px;margin-bottom: 0px;border-left-width: 0px;border-right-width: 0px;"> <label style="padding:10px 0px 0px 10px;"> <h3>@item.Key</h3> <p>User Name: @item.Value</p> </label> </label> </fieldset> </label> </a><a href="#" rel="external"></a> </li> } </ul>
allows not to forget the form in the view:
@using (Html.BeginForm("SensorSearch", "Home", Model.PageNav.StayRouteValues, FormMethod.Post, new Dictionary<string, object>() { { "data-ajax", "false" }, { "id", "sensor_search_form" } }))
now the displayed page will look like this in the aspect of the checkbox:
<li><a href="#" style="padding-top: 0px;padding-bottom: 0px;padding-right: 42px;padding-left: 0px;"> <label style="border-top-width: 0px;margin-top: 0px;border-bottom-width: 0px;margin-bottom: 0px;border-left-width: 0px;border-right-width: 0px;" data-corners="false"> <fieldset data-role="controlgroup" > <input id="selectedSensors_16__Value" name="selectedSensors[16].Value" type="checkbox" value="true" /> <input id="selectedSensors_16__Id" name="selectedSensors[16].Id" type="hidden" value="10141" /> <label for="selectedSensors_16__Value" style="border-top-width: 0px;margin-top: 0px;border-bottom-width: 0px;margin-bottom: 0px;border-left-width: 0px;border-right-width: 0px;"> <label style="padding:10px 0px 0px 10px;"> <h3>10141</h3> <p>User Name: 10141_TEN-2MP</p> </label> </label> </fieldset> </label> </a><a href="#" rel="external"></a> </li>
what you need to notice is the names given by the input flag and hidden input, we used it in the same way as the razor engine creates a name, and therefore after sending the engine will display it as an array, and therefore you can create any dynamic list of flags, wherever you want, like in any other language (e.g. php, etc.).
it's easy: it's easy:
1. create a checkbox class with row id and bool value.
2. put a check list in the controller method with some name.
3. Create 2 fields dynamically in your view, but make sure you match the razor motor naming system.
I was hoping this helped.