2012-07-03 1 views
23

Sto usando MVC 3 e RazorRasoio come creare un CheckBox e renderlo READONLY?

Al momento sto utilizzando

@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 modello:

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

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

    } 
} 

Per visualizzare una casella di controllo per una proprietà nel mio modello . Come sto facendo è sbagliato, quindi posso solo visualizzare un testo come VERO.

Potresti dirmi come creare il CheckBox con Razor? Avrei anche bisogno di averlo come READONLY.

Grazie per il vostro aiuto.

risposta

29

dovrebbe essere qualcosa di simile:

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

UPDATE:

Supponendo che la classe AdvSlot contiene una proprietà IsPublished puoi scrivere in loop:

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

Grazie LeftyX per il tuo commento, ho ricevuto un errore e non riesco a creare textcheckbox. Mi potrebbe aiutare? grazie – GibboK

+0

Si prega di notare MyProperty è una proprietà nel ViewModel qualche idea su come risolverlo? grazie – GibboK

+0

@GibboK: potresti, per favore, includere anche il tuo viewmodel? – LeftyX

0

Nella tua MyViewModel voi può rimuovere il setter:

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

e nel tuo Vista:

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

Ho ancora qualche problema, nota la mia modifica – GibboK

+0

questa riga dovrebbe darti errore @ Html.CheckBox (item.IsPublished, new {@disabled = "disabled"}), ha alcuni argomenti non validi –

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

questo dovrebbe funzionare. Tuttavia ho avuto un problema con @disabled = "disabilitato". Se faccio la casella di controllo selezionata per impostazione predefinita e rendere la casella di controllo disabilitata allo stesso tempo non pubblicherà con il suo valore. Al controller diventerà falso. Usando l'utente "return false" non si è in grado di modificare il valore e verrà postato anche il valore impostato sul carico come predefinito.

+3

La tua risposta dovrebbe essere accettata. Se usiamo proprietà @ disabled = "disabled", la casella di testo passa sempre FALSE al server –

+0

@Ahn Hoang Sono d'accordo con te. Questa è una risposta perfetta secondo me, poiché ho affrontato la stessa cosa che hai detto prima. – gdmanandamohon

+0

Questa è una soluzione migliore –

1

sto usando MVC4, si ottiene lo stesso effetto con un semplice qualcosa come

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

Non c'è bisogno di preoccuparsi per selezionare casella o impostare disabilitato te stesso. Non sono sicuro, se questa è una nuova funzionalità in MVC4, quindi forse funzionerà anche in MVC3.