Razor как создать CheckBox и сделать его READONLY?

Я использую MVC 3 и Razor

На данный момент я использую

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

МОДЕЛЬ ПРОСМОТРА:

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

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

    }
}

Чтобы отобразить флажок для свойства в моей модели. Поскольку я делаю неправильно, я могу отображать только текст, например TRUE.

Не могли бы вы рассказать мне, как создать CheckBox с помощью Razor? Мне также нужно было бы это как READONLY.

Спасибо за вашу помощь.

Ответ 1

Должно быть что-то вроде этого:

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

ОБНОВИТЬ:

Предполагая, что ваш класс AdvSlot содержит свойство IsPublished вы можете написать в своем цикле:

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

Ответ 2

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

Это должно сработать. Однако у меня возникла проблема с @disabled = "disabled". Если я установил флажок по умолчанию и сделаю флажок отключенным в то же время, он не опубликует его значение. На контроллере он будет ошибочным. Использование "return false" пользователь не сможет изменить значение, и оно также опубликует значение, которое установлено по умолчанию по умолчанию.

Ответ 3

Я использую MVC4, вы получаете тот же эффект с простым чем-то вроде

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

Не нужно убирать флажок или устанавливать самостоятельно. Не уверен, если это новая функция в MVC4, так что, возможно, она будет работать и в MVC3.

Ответ 4

В MyViewModel вы можете удалить установщик:

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

и в вашем представлении:

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