-1

我有一个模型,我绑定了一个带有文本框的视图。现在它们是某些文本框,我想让它们只读并且来自模型类。所以任何建议我怎样才能让它们只从模型类中读取。

4

2 回答 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 回答