我有一个模型,我已经绑定了带有文本框的视图。现在他们是某些文本框,我想让它们只读,而来自模型类。 所以任何建议我怎样才能让它们只从模型类中读取。
答案 0 :(得分:1)
ReadOnly
并未在MVC 2或MVC 1中工作,但它在3& 4(beta)。
您可以使用以下模型:
[ReadOnly(true)]
public bool IsAdmin { get; set; }
答案 1 :(得分:0)
以下是答案: 视图类似于
<div>
<table>
<tr>
<td>@Html.LabelFor(x => x.Name)</td>
<td>@Html.EditorFor(x => x.Name)</td>
</tr>
<tr>
<td>@Html.LabelFor(x => x.DOB)</td>
<td>@Html.EditorFor(x => x.DOB)</td>
</tr>
<tr>
<td>@Html.LabelFor(x => x.Address)</td>
<td>@Html.EditorFor(x => x.Address)</td>
</tr>
</table>
</div>
我的ViewModel是:
public class SampleModel
{
[EnableForRole]
public String Name { get; set; }
[EnableForRole]
public DateTime DOB { get; set; }
[EnableForRole]
public String Address { get; set; }
}
自定义元数据属性如下:
public class EnableForRoleAttribute : Attribute, IMetadataAware
{
public void OnMetadataCreated(ModelMetadata metadata)
{
var toEnable = IsAccessible(metadata.PropertyName);
metadata.IsReadOnly = !toEnable;
}
private bool IsAccessible(String actionName)
{
return HttpContext.Current != null && HttpContext.Current.User != null && HttpContext.Current.User.IsInRole(roleName); //if you use MembershipProvider
}
}
现在最后你应该在EditorTemplate文件夹中添加部分视图(String.cshtml),如:
@if (ViewData.ModelMetadata.IsReadOnly)
{
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue,
new { @readonly = "readonly" })
}
else
{
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue)
}
多数人。
享受。