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 方法创建一个隐藏的输入。为啥? [复制]