Este es mi punto de Vista. Cómo utilizar CheckboxFor():

@using eMCViewModels;
@model eMCViewModels.RolesViewModel
@{
    ViewBag.Title = "CreateNew";
}
<h2>
    CreateNew<
/h2>

@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>RolesViewModel</legend>
        <div class="editor-label">
            @Html.LabelFor(model => model.Name)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Name)
            @Html.ValidationMessageFor(model => model.Name)
        </div>
        <div>
            @foreach (RoleAccessViewModel mnu in Model.RoleAccess)
            {
                 //How to use checkboxfor here?
            }
        </div>
        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}
<div>
    @Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

Model.RoleAccess es un List<RoleAccessViewModel> y quiero crear una casilla de verificación usar @Html.CheckBoxFor().

Este es mi RoleAccessViewModel

public class RoleAccessViewModel
{
    public int RoleID { get; set; }
    public string RoleName { get; set; }
    public int MenuID { get; set; }
    public string MenuDisplayName { get; set; }
    public string MenuDiscription { get; set; }
    public string IsEnabled { get; set; } //changed to bool
}

Supongamos que tengo 5 elementos en la lista, entonces necesito 5 casilla de verificación con ID=menuID y Texto = menuDisplayName. ¿Cómo puedo lograr esto?

EDITAR

Mi intento de

@Html.CheckBoxFor(x=>x.RoleAccess.SingleOrDefault(r=>r.MenuID==mnu.MenuID).IsEnabled )
@Html.LabelFor(x=>x.RoleAccess.SingleOrDefault(r=>r.MenuID==mnu.MenuID ).MenuDisplayName ) 

Pero después de cambiar el tipo de IsEnabled de string a bool. La casilla de verificación de obras. Pero la Etiqueta se imprime sólo MenuDisplayName en lugar de valores . Puede ayuda ?

¿Por qué es IsEnabled una cadena?
¿Qué has intentado cuando se trata de llamar CheckBoxFor? No veo un intento de llamar.
ese es todo el punto de la cuestión. Al parecer, el OP no sabe que el CheckBoxFor ayudante opera sólo en los campos booleanos, es por eso que usted no está viendo cualquier intento, porque su modelo de vista simplemente no está adaptado para trabajar con casillas de verificación.
No estoy seguro de por qué tu tratando de usar int para un valor Booleano. Si esto es un Falso/Verdadero elemento, entonces usted querrá ajustar en consecuencia. ¿Cómo valora un tipo verdadero/falso, de un valor numérico? El segundo problema será cuando después de volver de una colección para el controlador dado por el código. Consulte haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx para la próxima edición….
He probado un montón y llegar el momento de la compilación problema. Eso es porque el tipo de IsEnabled es de cadena. Funciona, cuando me cambié a bool. Por favor, consulte la actualización de la pregunta

OriginalEl autor kbvishnu | 2012-07-25

4 Comentarios

  1. 9

    Cambio foreach para

    @for(int i = 0; i < Model.RoleAccess.Count; i++)
    {
        Html.CheckBoxFor(Model.RoleAccess[i].IsEnabled, new { id = Model.RoleAccess[i].MenuID });
        Html.DisplayFor(Model.RoleAccess[i].MenuDisplayName); //or just Model.RoleAccess[i].MenuDisplayName
    }
    Esto no va a funcionar ya que el usuario está tratando de convertir un entero a bool
    Bueno, creo que él puede hacer lo mismo si este enfoque funciona para él
    Html.LabelFor(Modelo.RoleAccess[i].MenuDisplayName); » este va a imprimir sólo MenuDisplayName. Por qué ? Se espera para imprimir los valores de la derecha ?
    esta mi error tipográfico. Me refería a DisplayFor.
    Yo m lo siento. Soy nuevo en MVC. Entonces pensé que la Etiqueta se imprime algo <label>Datos</label>. Gracias 🙂

    OriginalEl autor Madman

  2. 14

    Si me entenderá derecho, Que significa esto? Y IsEnabled debe bool tipo

    modelo

    public class RoleAccessViewModel
    {
        public int RoleID { get; set; }
        public string RoleName { get; set; }
        public int MenuID { get; set; }
        public string MenuDisplayName { get; set; }
        public string MenuDiscription { get; set; }
        public bool IsEnabled { get; set; }
    }

    ver

    @foreach (RoleAccessViewModel mnu in Model.RoleAccess)
    {
        @Html.CheckBoxFor(m => mnu.IsEnabled )
    }
    ¿Por qué no este marcado como la mejor respuesta?

    OriginalEl autor AliRıza Adıyahşi

  3. 8

    CheckBoxFor trabaja con las propiedades booleanas sólo. Así que la primera cosa que usted necesita hacer es modificar su modelo de vista en el fin de incluir una propiedad booleana que indica si el registro fue seleccionado:

    public class RoleAccessViewModel
    {
        public int RoleID { get; set; }
        public string RoleName { get; set; }
        public int MenuID { get; set; }
        public string MenuDisplayName { get; set; }
        public string MenuDiscription { get; set; }
        public bool IsEnabled { get; set; }
    }

    y, a continuación, me gustaría recomendar la sustitución de su foreach bucle con un editor de plantilla:

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

    y, finalmente, escribir el correspondiente editor de plantilla que automáticamente se representa para cada elemento de la RolesAccess colección (~/Views/Shared/EditorTemplates/RoleAccessViewModel.cshtml):

    @model RoleAccessViewModel
    @Html.HiddenFor(x => x.RoleID)
    ... might want to include additional hidden fields
    ... for the other properties that you want to be bound back
    
    @Html.LabelFor(x => x.IsEnabled, Model.RoleName)
    @Html.CheckBoxFor(x => x.IsEnabled)
    Muchas gracias por tu ayuda. I m nuevo a MVC. Puede saber por qué me necesita para evitar el uso del bucle for ?
    Muchas razones: es feo y dentro del bucle foreach que va a generar nombres incorrectos para los campos de entrada y el modelo predeterminado cuaderno no será capaz de deserializar los valores de la espalda cuando se envía el formulario. ¿Por qué no seguir con los convenios que están integrados directamente en el marco. Hace que sus puntos de vista de manera mucho más simple y correcta.
    Gracias. Permítanme tratar de encontrar más ventajas y comprobación de la forma de u mencionado.

    OriginalEl autor Darin Dimitrov

Dejar respuesta

Please enter your comment!
Please enter your name here