Tiene su punto de vista de modelo como éste para representar el elemento CheckBox
public class ChannelViewModel
{
public string Name { set;get;}
public int Id { set;get;}
public bool IsSelected { set;get;}
}
Ahora su principal modelo de vista serán así
public class AlertViewModel
{
public int AlertId { get; set; }
public List<ChannelViewModel> UserChannelIds { get; set; }
//Other Properties also her
public AlertViewModel()
{
UserChannelIds=new List<ChannelViewModel>();
}
}
En su GET
Acción, se le llene el valores del ViewModel y lo envió a la vista.
public ActionResult AddAlert()
{
var vm = new ChannelViewModel();
//The below code is hardcoded for demo. you mat replace with DB data.
vm.UserChannelIds.Add(new ChannelViewModel{ Name = "Test1" , Id=1});
vm.UserChannelIds.Add(new ChannelViewModel{ Name = "Test2", Id=2 });
return View(vm);
}
Ahora vamos a crear una plantilla de editor. Ir a Views/YourControllerName
y Creta una carpeta llamada "EditorTemplate" y crear una nueva vista allí con el mismo nombre que de la Propiedad Nombre (ChannelViewModel.cshtml
)
añadir este código ro su nuevo editor de plantillas.
@model ChannelViewModel
<p>
<b>@Model.Name</b> :
@Html.CheckBoxFor(x => x.IsSelected) <br />
@Html.HiddenFor(x=>x.Id)
</p>
En su vista principal, debe consultar con el editor de plantillas usando el método EditorFor
HTML ayudante.
@model AlertViewModel
<h2>AddTag</h2>
@using (Html.BeginForm())
{
<div>
@Html.LabelFor(m => m.AlertId)
@Html.TextBoxFor(m => m.AlertId)
</div>
<div>
@Html.EditorFor(m=>m.UserChannelIds)
</div>
<input type="submit" value="Submit" />
}
Ahora cuando publique el formulario, su modelo tendrá la Colección UserChannelIds
en las casillas de verificación seleccionada va a tener un valor True
para la IsSelected
propiedad.
[HttpPost]
public ActionResult AddAlert(AlertViewModel model)
{
if(ModelState.IsValid)
{
//Check for model.UserChannelIds collection and Each items
// IsSelected property value.
//Save and Redirect(PRG pattern)
}
return View(model);
}
Gracias por publicar. Todavía estoy un poco confundido, sin embargo. Parece excesivo agregar tres clases y tres plantillas de editor para asignar algunas casillas de verificación a un modelo de vista. ¿Es esta la manera más fácil? –
¿Dónde hay 3 clases y 3 plantillas de editor? Veo 2 clases y 1 plantilla de editor – Shyju
Tengo tres propiedades de lista, así que asumí que necesitaría tres clases y tres plantillas de edición para usar su solución. ¿No es eso correcto? –