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

Posted

技术标签:

【中文标题】Razor 如何创建一个 CheckBox 并使其成为 READONLY?【英文标题】:Razor how to create a CheckBox and make it READONLY? 【发布时间】:2012-07-03 18:02:59 【问题描述】:

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

感谢您的帮助。

【问题讨论】:

【参考方案1】:

我将添加我的案例,这可能对某人有用.. 如果您的复选框中也有 html 属性,那么

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

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

【讨论】:

【参考方案2】:

我使用的是 MVC4,你用一个简单的东西就能得到同样的效果

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

无需关心选择复选框或自己设置禁用。不确定,如果这是 MVC4 中的新功能,那么也许它也可以在 MVC3 中使用。

【讨论】:

【参考方案3】:
 @Html.CheckBoxFor(model => model.IsActive, new  onclick = "return false" )

这应该可以。但是我遇到了@disabled =“禁用”的问题。如果我默认选中该复选框并同时禁用该复选框,它将不会发布其值。在控制器上它会变成假的。使用“return false”用户将无法更改该值,并且它还将发布默认设置为加载的值。

【讨论】:

您的回答应该被接受。如果我们使用属性@disabled="disabled",textboxfor 总是将 FALSE 传递给服务器 @Ahn Hoang 我同意你的看法。在我看来,这是一个完美的答案,因为我遇到了你之前所说的同样的事情。 这是一个更好的解决方案 @AnhHoang 我相信服务器实际上只是省略了任何禁用控件的值;是服务器上的模型绑定将视图模型的属性初始化为false(布尔字段的默认值)。【参考方案4】:

应该是这样的:

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

更新:

假设您的类 AdvSlot 包含一个属性 IsPublished,您可以在循环中编写:

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

【讨论】:

感谢 LeftyX 的评论,我收到一个错误,我无法创建文本复选框。你能帮帮我吗?谢谢 请注意 MyProperty 是 ViewModel 中的一个属性,知道如何解决吗?谢谢 @GibboK:请您也包括您的视图模型吗? @GibboK:看看你的 HTML。您的解决方案会生成重复的 ID。 错误的解决方案,禁用的复选框不会在帖子中传回。【参考方案5】:

在您的 MyViewModel 中,您可以删除设置器:

public bool IsPublished 

   get 
        //... get from db
       

在你的视野中:

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

【讨论】:

这一行应该给你错误 @Html.CheckBox(item.IsPublished, new @disabled = "disabled" ) ,它有一些无效的参数

以上是关于Razor 如何创建一个 CheckBox 并使其成为 READONLY?的主要内容,如果未能解决你的问题,请参考以下文章

Razor ViewEngine HTML.Checkbox 方法创建一个隐藏的输入。为啥? [复制]

如何创建 ElasticSearch 类型并使其在索引中可搜索

如何使用 div 标签创建布局并使其具有响应性 [关闭]

如何存储字符'\b'并使其被c程序文件识别

完成部分网格并使其防水

创建 ViewController 并使其可下载