web-dev-qa-db-fra.com

Razor comment créer un CheckBox et le rendre READONLY?

J'utilise MVC 3 et Razor

En ce moment j'utilise

@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>    
}

Le modèle de vue:

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

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

    }
}

Pour afficher une case à cocher pour une propriété dans mon modèle. Comme je le fais est mal, je ne peux donc afficher qu'un texte du type VRAI.

Pourriez-vous s'il vous plaît me dire comment créer le CheckBox avec Razor? J'aurais aussi besoin de l'avoir READONLY.

Merci de votre aide.

26
GibboK

Devrait être quelque chose comme ça:

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

METTRE À JOUR:

En supposant que votre classe AdvSlot contient une propriété IsPublished, vous pouvez écrire dans votre boucle:

<td>
    @Html.CheckBox(item.AdvSlotId + "_IsPublished", item.IsPublished, new { @disabled = "disabled" });
</td> 
36
LeftyX
 @Html.CheckBoxFor(model => model.IsActive, new { onclick = "return false" })

Cela devrait marcher. Cependant, j'ai eu un problème avec @disabled = "disabled". Si je fais la case à cocher par défaut et que la case à cocher est désactivée en même temps, il ne publiera pas avec sa valeur. Au contrôleur, cela deviendra faux. En utilisant "return false", l'utilisateur ne pourra pas modifier la valeur et affichera également la valeur définie par défaut au chargement. 

19
Anupam Roy

J'utilise MVC4, vous obtenez le même effet avec un simple quelque chose comme

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

Pas besoin de vous soucier de sélectionner case à cocher ou définir désactivé vous-même. Pas sûr, s’il s’agit d’une nouvelle fonctionnalité de MVC4, cela fonctionnera peut-être également dans MVC3.

1
outofmind

Dans votre MyViewModel, vous pouvez supprimer le setter:

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

et dans votre vue:

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