我有一个模型,我绑定了一个带有文本框的视图。现在它们是某些文本框,我想让它们只读并且来自模型类。所以任何建议我怎样才能让它们只从模型类中读取。
问问题
326 次
2 回答
1
ReadOnly
不适用于 MVC 2 或 MVC 1,但它适用于 3 和 4(测试版)。
从模型中,您可以使用如下:
[ReadOnly(true)]
public bool IsAdmin { get; set; }
于 2012-10-30T10:54:49.203 回答
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>
我的视图模型是:
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)
}
就这样。
享受。
于 2012-10-30T11:05:15.533 回答