wake-up-neo.net

Rasiermesser, wie man eine CheckBox erstellt und READONLY macht?

Ich verwende MVC 3 und Razor

Im Moment verwende ich

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

Das Ansichtsmodell:

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

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

    }
}

So zeigen Sie ein Kontrollkästchen für eine Eigenschaft in meinem Modell an. Da ich falsch bin, kann ich nur einen Text wie TRUE anzeigen.

Könnten Sie mir bitte sagen, wie man die CheckBox mit Razor erstellt? Ich würde es auch als READONLY haben müssen.

Danke für Ihre Hilfe.

26
GibboK

Sollte so etwas sein:

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

AKTUALISIEREN:

Angenommen, Ihre Klasse AdvSlot enthält eine Eigenschaft IsPublished, die Sie in Ihre Schleife schreiben können:

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

Das sollte funktionieren. Ich habe jedoch ein Problem mit @disabled = "disabled". Wenn ich das Kontrollkästchen standardmäßig aktiviere und das Kontrollkästchen zur gleichen Zeit deaktiviere, wird es nicht mit seinem Wert veröffentlicht. Beim Controller wird es falsch werden. Wenn der Benutzer "return false" verwendet, kann er den Wert nicht ändern, und er wird auch den Wert buchen, der beim Laden standardmäßig festgelegt wurde. 

19
Anupam Roy

Ich verwende MVC4, Sie haben den gleichen Effekt wie ein einfaches

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

Sie brauchen sich nicht darum zu kümmern, Checkbox oder Set disabled sich selbst zu wählen. Nicht sicher, ob dies ein neues Feature in MVC4 ist, daher wird es möglicherweise auch in MVC3 funktionieren.

1
outofmind

In Ihrem MyViewModel können Sie den Setter entfernen:

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

und in deiner Sicht:

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