Razor如何创建一个CheckBox并使其成为READONLY?

时间:2012-07-03 10:07:25

标签: asp.net-mvc asp.net-mvc-3 razor

我正在使用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的文本。

你能告诉我如何使用Razor创建CheckBox吗?我还需要把它作为READONLY。

感谢您的帮助。

5 个答案:

答案 0 :(得分:37)

应该是这样的:

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

更新:

假设您的班级AdvSlot包含属性IsPublished,您可以在循环中写入:

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

答案 1 :(得分:20)

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

这应该有效。但是我遇到了@disabled =&#34;禁用&#34;的问题。如果我默认选中复选框并同时禁用复选框,则不会发布其值。在控制器,它将是假的。使用&#34;返回false&#34;用户无法更改该值,并且它还将默认发布已设置为加载的值。

答案 2 :(得分:3)

我使用MVC4,您可以通过简单的

获得相同的效果
@Html.DisplayFor(m => m.IsPublished)

无需自己选择复选框或设置已禁用。不确定,如果这是MVC4中的新功能,那么也许它也适用于MVC3。

答案 3 :(得分:0)

在MyViewModel中,您可以删除setter:

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

并在您的视图中:

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

答案 4 :(得分:0)

我只添加可能对某人有用的案例。.如果您的checkboxFor中也具有html属性,那么

  @Html.CheckBoxFor(model => model.item, new { onclick = "return false", Title = "is not editable",htmlAttributes = new { @class = "form-control" } })

@Anupam Roy的答案会很好。只需添加我的案子。希望它会有用。