2012-07-03 10 views
23

estoy usando MVC 3 y RazorRazor cómo crear un CheckBox y hacerlo READONLY?

Por el momento estoy usando

@model MyProject.ViewModels.MyViewModel 

    @foreach (var item in Model.MyProperty) 
{ 
    <tr> 
     <td> 
      @Html.ActionLink("Edit", "Edit", new { id = item.AdvSlotId }) | 
      @Html.ActionLink("Details", "Details", new { id = item.AdvSlotId }) | 
      @Html.ActionLink("Delete", "Delete", new { id = item.AdvSlotId }) 
     </td> 
     <td> 
      @item.AdvSlotId 
     </td> 
     <td> 
      @item.Name 
     </td> 
     <td> 
      @item.Description 
     </td> 
     <td> 
      @Html.CheckBox(item.IsPublished, new { @disabled = "disabled" }) 
     </td> 
     <td> 
      @item.Notes 
     </td> 
    </tr>  
} 

la vista del modelo:

namespace MyProject.ViewModels 
{ 
    public class MyViewModel 
    { 
     public MyViewModel(List<AdvSlot> advSlots) 
     { 
      MyProperty= advSlots; 
     } 

     public List<AdvSlot> MyProperty { get; set; } 

    } 
} 

Para mostrar una casilla de verificación para una propiedad en mi modelo . Como lo estoy haciendo, está mal, así que solo puedo mostrar un texto como VERDADERO.

¿Podría decirme cómo crear el CheckBox con Razor? También necesitaría tenerlo como READONLY.

Gracias por su ayuda.

Respuesta

29

debe ser algo como esto:

@Html.CheckBoxFor(m => m.IsPublished, new { @disabled = "disabled" }) 

ACTUALIZACIÓN:

Suponiendo que la clase AdvSlot contiene una propiedad IsPublished puede escribir en su bucle:

<td> 
    @Html.CheckBox(item.AdvSlotId + "_IsPublished", item.IsPublished, new { @disabled = "disabled" }); 
</td> 
+0

Gracias a LeftyX por su comentario, recibo un error y no puedo crear la casilla de verificación de texto. podrías ayudarme? gracias – GibboK

+0

Tenga en cuenta que MyProperty es una propiedad en el ViewModel ¿alguna idea de cómo resolverlo? gracias – GibboK

+0

@GibboK: ¿podrías incluir tu modelo de vista también? – LeftyX

0

En su MyViewModel se puede eliminar el colocador:

public bool IsPublished 
{ 
    get { 
     //... get from db 
     } 
} 

y en su Vista:

@Html.CheckBoxFor(m => m.IsPublished, new {@disabled="disabled"}) 
+0

todavía tengo algunos problemas, tenga en cuenta mi edición – GibboK

+0

esta línea debe darle de error @ Html.Checkbox (item.IsPublished, nueva {@disabled = "desactivado"}), tiene algunos argumentos no válidos –

16
@Html.CheckBoxFor(model => model.IsActive, new { onclick = "return false" }) 

esto debería funcionar. Sin embargo, tengo un problema con @disabled = "disabled". Si selecciono la casilla de verificación de forma predeterminada y la desactiva, al mismo tiempo no se publicará con su valor. En el controlador obtendrá falso. El uso del usuario "return false" no podrá cambiar el valor y también publicará el valor que se ha establecido en la carga como por defecto.

+3

Su respuesta debe ser aceptada. Si utilizamos la propiedad @ discapacitados = "desactivado", la textboxfor pasa siempre a FALSO servidor –

+0

@Ahn Hoang estoy de acuerdo contigo. Esta es una respuesta perfecta en mi opinión, ya me he enfrentado lo mismo que ha dicho antes. – gdmanandamohon

+0

Esta es una solución mejor –

1

estoy usando MVC4, se obtiene el mismo efecto con un simple algo así como

@Html.DisplayFor(m => m.IsPublished) 

No hay necesidad de preocuparse para seleccionar la casilla de verificación o conjunto discapacitados mismo. No estoy seguro, si esta es una característica nueva en MVC4, entonces quizás funcione también en MVC3.

Cuestiones relacionadas