Pase la lista de casillas de verificación a la vista y extraiga IEnumerable [duplicado]
Tengo una lista de elementos que se asociarán a un usuario. Es una relación de uno a muchos. Quiero que la lista completa de elementos pase a la vista para que puedan elegir entre los que aún no están asociados (y también ver los que ya están asociados). Quiero crear casillas de verificación a partir de estos. Luego quiero enviar los seleccionados nuevamente al controlador para asociarlos. ¿Cómo puedo pasar la lista de todos ellos, incluidos aquellos que aún no están asociados, y volver a pasarlos de manera confiable para que se asocien?
Esto es lo que intenté primero, pero está claro que esto no funcionará ya que baso las entradas en los elementos pasados a través de la AllItems
colección, que no tiene conexión con los elementos del propio usuario.
<div id="item-list">
@foreach (var item in Model.AllItems)
{
<div class="ui field">
<div class="ui toggle checkbox">
<input type="checkbox" id="[email protected]" name="Items" value="@item.Active" />
<label for="[email protected]">@item.ItemName</label>
</div>
</div>
}
</div>
No puede vincularse a una colección mediante un foreach
bucle. Tampoco debería generar manualmente su html, que en este caso no funcionaría porque las casillas de verificación no marcadas no se devuelven. Utilice siempre los asistentes HTML fuertemente tipados para obtener el enlace correcto del modelo bidireccional.
No ha indicado cuáles son sus modelos, pero suponiendo que tiene User
y desea seleccionar Roles
para ese usuario, cree modelos de vista para representar lo que desea mostrar en la vista.
public class RoleVM
{
public int ID { get; set; }
public string Name { get; set; }
public bool IsSelected { get; set; }
}
public class UserVM
{
public UserVM()
{
Roles = new List<RoleVM>();
}
public int ID { get; set; }
public string Name { get; set; }
public List<RoleVM> Roles { get; set; }
}
En el método GET
public ActionResult Edit(int ID)
{
UserVM model = new UserVM();
// Get you User based on the ID and map properties to the view model
// including populating the Roles and setting their IsSelect property
// based on existing roles
return View(model);
}
Vista
@model UserVM
@using(Html.BeginForm())
{
@Html.HiddenFor(m => m.ID)
@Html.DisplayFor(m => m.Name)
for(int i = 0; i < Model.Roles.Count; i++)
{
@Html.HiddenFor(m => m.Roles[i].ID)
@Html.CheckBoxFor(m => m.Roles[i].IsSelected)
@Html.LabelFor(m => m.Roles[i].IsSelected, Model.Roles[i].Name)
}
<input type"submit" />
}
Luego, en el método de publicación, su modelo estará vinculado y podrá verificar qué roles se han seleccionado.
[HttpPost]
public ActionResult Edit(UserVM model)
{
// Loop through model.Roles and check the IsSelected property
}